简而言之,矢量矢量的定义是否正确?
// 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";
}
但是会出现以下运行时错误。
答案 0 :(得分:4)
你的代码错了:
// Create a dynamic vector which contain another 3 vectors
vector<int> **list = new vector<int>*[3]();
不,这会创建一个包含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);
}
是的,但是......你真的希望你的第一个矢量的大小为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
的{{1}},每个{3}包含3个int(3x3矩阵)。
* 如果您使用c ++ 03,请使用vector<int>
。
然后你可以迭代(并且只获得vector< vector<int> >
作为输出,因为你没有将它初始化为其他任何东西):
0
或者更好的基于范围的循环(c ++ 11):
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"
}