2016-11-06 5 views
1

remove_ifvector<T>::erase의 작동 방식을 파악하려고합니다. 나는 (홀수 요소를 제거하려는) 아래의 코드가 있습니다알고리즘이있는 벡터의 특정 요소 지우기

v2.clear(); 
v2 = { 10, 20, 21, 30, 31, 33, 44, 66, 67 }; //vector<int> 
cout << "v2 is now: " << endl; 
printCollection(v2);  
cout << "Trying to remove odds from v2: " << endl; 
auto what = remove_if(begin(v2), end(v2), [](int elem) {return elem % 2 != 0;}); 
v2.erase(begin(v2), what); 
printCollection(v2); 

을하고 여기에 출력됩니다 : 무슨 일

v2 is now: 
10 20 21 30 31 33 44 66 67 

Trying to remove odds from v2: 
33 44 66 67 

은?

답변

3

코드의 동작은 지정되지 않았습니다. std::remove_if은 제거되지 않은 모든 요소를 ​​컨테이너의 앞쪽으로 이동시키고 새로운 논리적 끝 반복자를 반환합니다. 이 새 끝 (코드에서 what)과 .end() 사이의 모든 요소에는 지정되지 않은 값이 있습니다.

당신은 what에서 .end() 대신에 삭제해야합니다

v2.erase(what, end(v2)); 

demo