简而言之,向量的向量的定义正确吗?

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


但是出现以下运行时错误。

c&#43;&#43; - * vector的** vector正确吗?如何打印所有vector中的所有值?-LMLPHP

最佳答案

您的代码是错误的:

// 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个vectorvector<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";
}

10-08 06:53
查看更多