如何在C ++中制作多向量

时间:2012-03-27 23:05:16

标签: c++

我想知道为什么我不能在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;
}

2 个答案:

答案 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);
}