我知道矢量可以构造成预定义的大小
vector<int> foo(4);
但有没有办法指定嵌套向量的维度?
vector< vector<int> > bar(4);
让我们说我想要一个大小为4的向量包含大小为4的向量...就像一个4x4多维数组的整数?
答案 0 :(得分:25)
that constructor的第二个参数是要初始化的值。现在你得到4个默认构造的向量。用一个更简单的一维例子来澄清:
// 4 ints initialized to 0
vector<int> v1(4);
// *exactly* the same as above, this is what the compiler ends up generating
vector<int> v2(4, 0);
// 4 ints initialized to 10
vector<int> v3(4, 10);
所以你想要:
vector< vector<int> > bar(4, vector<int>(4));
// this many ^ of these ^
这将创建一个向量向量的向量,初始化为包含4个向量,这些向量初始化为包含4个整数,初始化为0.(如果需要,可以指定int的默认值。)
口感饱满,但不是太难。 :)对于一对:
typedef std::pair<int, int> pair_type; // be liberal in your use of typedef
typedef std::vector<pair_type> inner_vec;
typedef std::vector<inner_vec> outer_vec;
outer_vec v(5, inner_vec(5, pair_type(1, 1)); // 5x5 of pairs equal to (1, 1)
// this many ^ of these ^
//this many ^ of these ^
答案 1 :(得分:1)
除了std::vector
之外,您还可以使用boost::multi_array
。来自the documentation:
#include "boost/multi_array.hpp"
#include <cassert>
int
main () {
// Create a 3D array that is 3 x 4 x 2
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4][2]);
// Assign values to the elements
int values = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
A[i][j][k] = values++;
// Verify values
int verify = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
assert(A[i][j][k] == verify++);
return 0;
}