vector<vector<int>> sort_a;
vector<int> v2;
vector<int> v3;
for (int i=0; i<4; ++i) {
v2.push_back(i);
for (int j=0; j<4; ++j) {
v3.push_back(j);
sort_a.push_back(v2);
sort_a.push_back(v3);
}
}
矢量sort_a应该是一个4x4的阵列,而不是输出为31x1有很多空元素,如何插入多维向量元素?
不要把它想成一个多维向量,把它作为载体的载体。
int n = 4;
std::vector<std::vector<int>> vec(n, std::vector<int>(n));
// looping through outer vector vec
for (int i = 0; i < n; i++) {
// looping through inner vector vec[i]
for (int j = 0; j < n; j++) {
(vec[i])[j] = i*n + j;
}
}
我包括在括号(vec[i])[j]
只是为了解。
编辑:
如果你想通过填写您的载体push_back
,你可以创建在内环临时载体,填充它,然后它的push_back到矢量:
for (int i = 0; i < n; i++) {
std::vector<int> temp_vec;
for (int j = 0; j < n; j++) {
temp_vec.push_back(j);
}
vec.push_back(temp_vec);
}
然而, push_back
调用导致慢的代码,因为不仅需要重新分配你的载体的时候,也是你必须创建一个临时和复制。
一个vector<vector<int>>
不是用于多维存储的最佳实施方式。 下面植入对我的作品。
template<typename T>
class array_2d {
std::size_t data;
std::size_t col_max;
std::size_t row_max;
std::vector<T> a;
public:
array_2d(std::size_t col, std::size_t row)
: data(col*row), col_max(col), row_max(row), a(data)
{}
T& operator()(std::size_t col, std::size_t row) {
assert(col_max > col && row_max > row)
return a[col_max*col + row];
}
};
使用情况:
array_2d<int> a(2,2);
a(0,0) = 1;
cout << a(0,0) << endl;
该解决方案是类似于中描述的一个位置 。