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

How to make a multi vector in C++

本文关键字:向量 C++      更新时间:2023-10-16

我想知道为什么我不能在C++中使用多向量/请看一下这个例子,它不起作用。

代码只有两个部分,foo函数用于操作向量,main函数用于回显它们。

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;
}

您正在访问不存在的元素。您需要事先构造向量。

假设向量的维度为v[2][5],则将foo()中的声明从MyVec v;替换为MyVec v(2, vector<double>(5, 0));

这基本上是将v构造为包含2个向量元素,而这2个向量单元又被构造为包含初始化为0的5个元素。

然后可以完全删除嵌套的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;
}

向量在第一次创建时没有任何元素。所以你不能这样做:

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