2011-12-14 3 views
3

에 CONST INT 2 차원 벡터를 초기화하는 방법 : 그것은 작동하지 않습니다CONST INT 2 차원 벡터를 초기화하는 방법 C++

Const int vector < vector <int> > v ? 

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

합니다.

+0

에 10 × 10 배열입니다. ['const' 벡터] (http://yosefk.com/c++fqa/const.html#fqa-18.1)는 수정할 수없는 벡터입니다. 그것은 그것 안에있는 객체들을'const'하게 만들지 않습니다. –

답변

6

이 (only in C++11) 수행 할 수 있습니다

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

또한 > >를 쓸 필요는 없습니다. 이 문제는 C++ 11에서 수정되었으므로 >>이 작동합니다. 오른쪽 시프트 연산자로 해석되지 않습니다 (C++ 03의 경우처럼). 컴파일러가 초기화리스트 기능을 지원하는 경우

+0

글쎄, 거기에 교대로 컴파일되지 않습니다. –

+4

@DavidSchwartz : 올바른 C++ 11입니다. – Nawaz

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; 

} 

을 처음 상태 나는 이것이 당신이하지 생각하지 생각하지 않는다 1