在2D std :: vector C上每个c ++ 11都不起作用?

new*_*ost 2 c++ foreach vector c++11

初始化称为矩阵的2D矢量.

std::vector<std::vector<int>> matrix(512,std::vector<int>(512));
Run Code Online (Sandbox Code Playgroud)

现在我想调整它的大小:

这有效:

    matrix.resize(50);
    for(int i = 0; i<matrix.size() ; i++)
        matrix[i].resize(50);
Run Code Online (Sandbox Code Playgroud)

这不起作用:

    matrix.resize(50);
    for(auto ele : matrix)
        ele.resize(50);
Run Code Online (Sandbox Code Playgroud)

for(auto ele : container)在其他地方使用,我应该使用Microsoft Visual C++编译器12.0支持C++ 11.

jua*_*nza 9

您正在每个循环迭代中复制内部向量.您需要使用参考:

for(auto& ele : matrix)
        ele.resize(50);
Run Code Online (Sandbox Code Playgroud)

  • Upticked.对于OP的好处,*通常*,使用`auto const &`进行直接只读访问,`auto &`进行可写访问,使用`auto`进行复制,你可以在不影响容器内容的情况下进行复制.您可能正在审查您的代码,以便您可以使用第一个代码来显着提高性能. (4认同)