2010-11-03 67 views
3

如何在C++中初始化2维vector<int>在CPP中初始化2维矢量<int>

例如我有4个阵列,每个阵列长度的8个整数,如下面

int a1[] = {1,2,3,4,5,6,7,8}; 
int a2[] = {1,2,3,4,9,10,11,12}; 
int a3[] = {1,2,5,6,9,10,13,14}; 
int a4[] = {1,3,5,7,9,11,13,15}; 

和我有此

vector< vector <int> > aa (4); 

aa[i] (a1,a1+8); 

但是这给错误。我甚至尝试将数组a1提供给v1,并将v1传递给aa[i],但仍然失败。

那么这将是初始化的aa 2维vector<int>

+0

将每一个子阵列具有完全相同8个INTS的长度是多少?简单地说,拥有一个扁平的一维数组可以占据前8个点,a2占据第8个点,等等。 – 2010-11-03 21:21:23

回答

2
aa[i].assign(a1,a1+8); 
+0

+1 - 这个答案比较好。我打算使用'assign',但是在SGI的页面上没有'assign'就被抛弃了。 – aschepler 2010-11-03 21:16:14

0

初始化的元素的正确方法也初始化所包含vector<int>对象的所有四个,使用默认的构造函数vector<int>。所以你需要将数据添加到这些空向量,而不是初始化它们。

尝试例如:

std::copy(a1, a1+8, std::back_inserter(aa[i])); 
+0

你的意思是''back_inserter(aa [i])' – 2010-11-03 21:13:12

+0

是的,谢谢。固定。 – aschepler 2010-11-03 21:17:23

2
int arr[4][8] = 
{ 
    {1, 2, 3, 4, 5, 6, 7, 8}, 
    {1, 2, 3, 4, 9, 10, 11, 12}, 
    {1, 2, 5, 6, 9, 10, 13, 14}, 
    {1, 3, 5, 7, 9, 11, 13, 15}, 
}; 

std::vector<std::vector<int> > vec(4, std::vector<int>(8)); 
for (int i = 0; i < 4; ++i) 
{ 
    vec[i].assign(arr[i], arr[i] + 8); 
}