简而言之,向量的向量的定义正确吗?
// Create a dynamic vector which contain another 3 vectors
vector<int> **list = new vector<int>*[3]();
// Create and initialize vectors that related to a vector
for (unsigned short i = 0; i < 3; i++) {
list[i] = new vector<int>(i);
}
现在我要打印出所有向量中的所有元素。
for (unsigned short i = 0; i < 3; i++) {
for (unsigned short io = 0; io < 3; io++) {
cout << list[i]->at(io) << endl;
}
cout << "/n";
}
但是出现以下运行时错误。
最佳答案
您的代码是错误的:
// Create a dynamic vector which contain another 3 vectors
vector<int> **list = new vector<int>*[3]();
不,这将创建一个由3个指向
vector<int>*
的指针的数组。// Create and initialize vectors that related to a vector
for (unsigned short i = 0; i < 3; i++) {
list[i] = new vector<int>(i);
}
是的,但是...您是否真的希望第一个向量的大小为
0
,第二个向量的大小为1
,...?cout << list[i]->at(io) << endl;
您确实初始化了
list[i]
,它是一个vector<int>*
,所以list[i]->at
是正确的,但是由于您的第一个向量大小为0
,因此此代码失败。您可能想要的是*:
vector<vector<int>> list(3, vector<int>(3));
初始化一个包含3个
vector
的vector<int>
,每个包含3个int(3x3矩阵)。*如果使用c ++ 03,请使用
vector< vector<int> >
。然后,您可以进行迭代(由于未将其初始化为其他任何内容,因此仅获得
0
作为输出):for (unsigned short i = 0; i < 3; i++) {
for (unsigned short io = 0; io < 3; io++) {
cout << list[i][io] << endl;
}
cout << "/n"; // Should be "\n"
}
或者使用基于范围的循环(c ++ 11)更好:
for (auto const &row: list) {
for (auto const &val: row) {
cout << val << " ";
}
cout << "\n";
}