我想知道为什么我不能在C ++中使用多个向量/请看一下这个例子,但它不起作用。
代码只有两个部分,操作矢量的foo函数和回显它们的主函数。
typedef vector< vector<double> > MyVec;
MyVec foo() {
MyVec v;
for (int index=0; index < 2; index ++) {
for (int j=0; j<5; j++) {
v[index][j];
}
}
return v;
}
int main () {
MyVec z = foo();
for (int i = 0; i < z.size(); i++) {
cout << z[i][1];
}
return 0;
}
答案 0 :(得分:2)
您正在访问不存在的元素。您需要事先构建向量。
假设您的向量的维度为v[2][5]
,请将foo()
中的声明从MyVec v;
替换为MyVec v(2, vector<double>(5, 0));
这基本上是构造v以包含2个向量元素,而这2个向量元素又被构造为包含5个初始化为0的元素。
然后,您可以完全删除嵌套的for循环。
说实话,你真正需要的是:
typedef vector< vector<double> > MyVec;
int main () {
MyVec z(2, vector<double>(5, 0));
for (int i = 0; i < z.size(); i++) {
cout << z[i][1];
}
return 0;
}
答案 1 :(得分:1)
矢量首次创建时没有任何元素。所以你不能做这样的事情:
std::vector<double> vec;
vec[1] = 42.0;
因为你试图写一个不存在的元素。
如果您想要一个已知尺寸的2D矢量,一个选项是指定尺寸:
MyVec v(NUM_ROWS);
for (int i = 0; i < NUM_ROWS; i++) {
v[i].resize(NUM_COLS);
}