如何在C++中初始化一个const int类型的二维向量?

3

How to initialize a const int 2-dimension vector:

Const int vector < vector < int > >  v ? 

v = {1 , 1 ; 1, 0}  ?

它无法工作。


我认为这个操作不是你想象中的那样。一个“const向量”是一个不能被修改的向量,但是它并不会使得其中的对象变成“常量”。 - David Schwartz
3个回答

6
你可以这样做(仅限于C++11):
const vector<vector<int>>  v{{1,2,3},{4,5,6}};

请注意,您不需要编写> >。由于在C++11中已经修复了此问题,>>将起作用。它不会被解释为右移运算符(这是C++03的情况)。

那肯定无法编译,因为其中有一个右移操作。 - David Schwartz

5
如果你的编译器支持 C++11 的初始化列表特性(是这个名字吗?),你可以这样做:
const vector<vector<int>> v {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

请注意,您将无法向第一维添加任何元素(但可以向第二维添加元素),例如。
v.push_back(vector<int> { 8, 9, 10 }); // BAD
v[0].push_back(4); // OK

如果你想让第二维不可修改,你可以这样做:
vector<const vector<int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

然后
v.push_back(const vector<int> { 8, 9, 10 }); // OK
v[0].push_back(4); // BAD

如果您希望元素本身是 const,则应该这样做:

vector<vector<const int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

那么

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

您可能希望在运行时修改它,因此最好完全删除const


0
using namespace std;

int main(void){

    const vector< vector<int> > v(10, vector<int>(10,1));

    return 0;

}

将一个10x10的数组初始化为1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接