2012-03-27 62 views
-1

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

“它不工作”。当真? – tenfour 2012-03-27 23:07:06

+0

定义“不工作”。 – 2012-03-27 23:07:19

+0

你想做什么? – 2012-03-27 23:07:50

回答

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

你访问不存在的元素。您需要预先构建载体。

假设你的载体的尺寸是v[2][5],从MyVec v;替换foo()声明到MyVec v(2, vector<double>(5, 0));

这基本上构建v至包含2个矢量元素,并且这些2个矢量元素依次被构建为含有5元素初始化为0.

然后,您可以完全删除嵌套的for-loop。

老实说,你真正需要的是这样的:

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