vector <int> V[]
和vector< vector<int> > V
都是 2D数组。
但是他们之间的区别是什么?我们在不同的地方使用它的地方是什么?请简要说明一下。
答案 0 :(得分:30)
vector<int> V[]
是一个向量数组。
vector< vector<int> > V
是向量的载体。
向量是表示可以更改的数组的序列容器 大小强>
就像数组一样,矢量使用连续的存储位置 元素,这意味着他们的元素也可以使用 定期指向其元素的指针的偏移量,以及同样有效 如数组。但与数组不同,它们的大小可以动态变化, 他们的存储由容器自动处理。
<强> TL; DR 强>:
如果您想使用固定数量的std::vector
元素,可以使用vector <int> V[]
。
如果您想使用std::vector
的动态数组,可以使用vector< vector<int> > V
。
答案 1 :(得分:12)
一个不同之处在于,尽管两者都可以以相同的方式初始化,例如,
vector<int> V1[] {{1,2,3}, {4,5,6}};
vector<vector<int>> V2 {{1,2,3}, {4,5,6}};
并访问
cout << V1[0].back() << endl;
cout << V2[0].back() << endl;
V1无法成长。你不能使V1.push_back(...)不是矢量对象。它只是一个阵列。第二个是动态的。你可以随意成长。
答案 2 :(得分:2)
vector<vector<int>> v(26);
是一个包含向量的向量。在此示例中,您有一个包含26个矢量的矢量。代码v[1].push_back(x)
意味着x
被推回到向量中的第一个向量。
vector<int> a[26];
是向量数组。换句话说,包含26个整数向量的一维数组。代码a[1].push_back(x);
已将x
推回到数组的第一个索引。
答案 3 :(得分:0)
vector V []只是一个固定数组;所以你只能添加/修改直到上限。它本身不是矢量,因此具有固定的大小限制。 然而,矢量&lt;矢量&gt; V是动态矢量,其大小可以动态增加。
答案 4 :(得分:0)
vector<int> v[]
是向量数组。也就是说,它是一个包含向量作为元素的数组。
因此,您不能更改数组部分的大小,但是我们可以在其元素中添加矢量。
例如,
1.vector<int> v1[] = {{1},{2},{3}}; // array that contains 3 vector elements.
2.vector<vector<int>> v2 = {{1},{2},{3}}; // vector that contains 3 vector elements.
因此,对于第一个来说,我们无法更改v的大小,但是由于它是向量,因此我们可以在其元素中添加或删除元素。
v1.push_back(4); // this will give an error since we cannot the predefined size of array.
v1[1].push_back(4); // this is acceptable since we are changing the vector part.
这使v1 {{1},{2,4},{3}}
对于第二个,我们可以更改整体大小及其元素。
v2.push_back(4); // this is acceptable since it is vector.