2016-06-02 1 views
2

우리는 C++ STL을 사용하여 이렇게 할 수 있습니까? 그렇다면 요소를 어떻게 초기화할까요? 나는 이것을하려고 노력했지만 그것은 효과가 없다. 벡터는 크기가없는 기본 단위C++ : 쌍 <vector<int>, 벡터 <int>> p;

pair<vector<int>,vector<int>>p; 
p.first[0]=2; 
+1

문제가 해결되지 않으면 ** 작동 방법 **을 고려하십시오. 그것은 컴파일합니까? 잘못된 결과가 나옵니까? 어떤 결과를 기대 했습니까? – user2079303

+0

호기심에 의해서만 무엇을하려고합니까? – Garf365

+5

독립적으로 사용할 수없는 것들을 결합하지 마십시오. upvotes는 어디에서 오는가? – LogicStuff

답변

5

우리는 C++ STL을 사용하여 이것을 할 수 있습니까

예. 하지만 아마도 standard library을 대신 사용하고있을 것입니다.

그렇다면 요소를 어떻게 초기화할까요?

쌍을 이루지 않은 벡터 요소를 초기화하는 것과 같은 방법으로 요소를 초기화합니다. List-initialization은 좋은 옵션입니다.

나는 이것을하려하지만 작동하지 않습니다.

절대 넣지 않은 벡터의 요소를 수정하려고합니다. operator[]의 역할을하는 페이지를 살펴보십시오. 벡터에 요소를 추가한다고 명시하지 않습니다. 그러나, other functions이 있습니다.

4

, 당신이해야 하나 push_back 일부 요소 또는 resize 그 때문에 처음.

pair<vector<int>, vector<int>> p = {{1,2,3}, {4,5,6}}; 
2

p.first과 (유형 std::vector<int>와) p.second이 초기화됩니다,하지만 그들은 그들에 요소가 없습니다, 여전히 빈 위치 : 당신의 페이지를 초기화 할 수있는 방법이 될 것입니다. 그런 다음 p.first[0] = 2;은 UB로 이어집니다.

당신은 할 수 있습니다

p.first.push_back(2); 
1

예 작동,하지만 당신은 당신이 그들의 요소에 액세스하기 전에 std::vector의 메모리를 할당 할 필요가 : 또는

//p now can hold 1 element 
p.first.resize(1); 

을, 당신은 push_back를 사용할 수 있습니다

//p now has 1 element with value 2 
p.first.push_back(2). 
관련 문제