我需要调整二维矢量(未知大小)的大小,如下所示:
//Creating the vector of vectors:
vector< vector< long > > v;
//Resizing the vectors:
/*Needing help here:
my current assumption is:
v.resize(1);
v[0].resize(1);
*/
//Adding elements:
v[0][0].push_back(0);
v[0][1].push_back(-1);
编译器在应用push_back时报告错误。我想我在调整矢量大小时遇到了问题。
目标是创建一个二维向量,根据添加的值动态分配内存。
提前感谢您的帮助
答案 0 :(得分:2)
你的假设是正确的。但是如果你想调整所有内部向量的大小,那就这样做:
vector< vector< long > > v;
v.resize(10);
for(size_t i = 0 ; i < 10 ; i++ )
v[i].resize(20);
请记住,当您使用v
作为v[i][j]
时,请确保0<=i<10
和0<=j< 20
。
现在为什么你的错误与你正在做的一样?
v.resize(1);
v[0].resize(1); //that means, the constraint is : `0<=i<1` and `0<=j<1`
v[0][0].push_back(0);
v[0][1].push_back(-1); //problematic line!
您收到错误是因为第二次拨打0<=i<1
时无法确定0<=j<1
和push_back
限制。
答案 1 :(得分:2)
您关于调整两个维度大小的假设是正确的,但是您在push_back上收到错误,因为v[0][0]
的类型是long &
,而不是vector<long> &
。
我想你想要:
v.resize(1);
//Don't resize the second dimension because you want it to grow dynamically
//v[0].resize(1);
v[0].push_back(0);
v[0].push_back(-1);
请记住,push_back仅调整特定行/列的大小。如果您对将v[0]
,v[1]
等添加相同数量的元素不一致,那么您最终会得到一个“锯齿状”数组。您可能希望将整个事情包装在一个类中以强制执行该一致性。
答案 2 :(得分:1)
// your current assumption is:
v.resize(1);
v[0].resize(1);
// modify the value
v[0][0] = new_value;
// resize again
v.resize(2);
for ( iterator iter = v.begin(); iter != v.end(); ++iter )
iter->resize(2);
这是一种可行且正确的方式。
答案 3 :(得分:1)
您的假设是正确的,替代嵌套容器的是Boost multi_array
,但它不太普遍。