如何在C++中初始化const int二维向量

use*_*288 3 c++ const vector data-structures

如何初始化const int二维向量:

Const int vector < vector < int > >  v ? 

v = {1 , 1 ; 1, 0}  ?
Run Code Online (Sandbox Code Playgroud)

这是行不通的 .

Naw*_*waz 6

你可以这样做(仅在C++ 11中):

const vector<vector<int>>  v{{1,2,3},{4,5,6}};
Run Code Online (Sandbox Code Playgroud)

另请注意,您无需编写> >.由于此问题已在C++ 11中得到修复,>>因此可行.它不会被解释为右移运算符(与C++ 03的情况一样).

  • @DavidSchwartz:这是正确的C++ 11. (4认同)

Set*_*gie 5

如果您的编译器支持C++ 11的初始化列表功能(就是它的名称?),您可以这样做:

const vector<vector<int>> v {
    { 1, 2, 3 },
    { 4, 5, 6 }
};
Run Code Online (Sandbox Code Playgroud)

请注意,您将无法向第一维添加任何元素(但您可以向第二维添加元素),例如

v.push_back(vector<int> { 8, 9, 10 }); // BAD
v[0].push_back(4); // OK
Run Code Online (Sandbox Code Playgroud)

如果你想让第二个维度不可修改,你就可以做到

vector<const vector<int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};
Run Code Online (Sandbox Code Playgroud)

然后

v.push_back(const vector<int> { 8, 9, 10 }); // OK
v[0].push_back(4); // BAD
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要元素本身const,你会这样做

vector<vector<const int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};
Run Code Online (Sandbox Code Playgroud)

然后

v.push_back(vector<const int> { 8, 9, 10 }); // OK
v[0].push_back(4); // OK
v[0][0] = 2; // BAD
Run Code Online (Sandbox Code Playgroud)

您可能希望在运行时对其进行修改,因此const完全删除它可能是件好事.