2016-10-21 7 views
-1

words_in_family 유형의 벡터는 vector<vector<string>>입니다. 문자 largest_family과 같지 않은 words_in_family의 모든 요소를 ​​삭제하려고하지만 문제가 있으며 그 이유를 모르겠습니다. 어떤 도움을 주셔서 감사합니다.벡터 내부 루프에서 요소 삭제

for (int i = words_in_family.size() - 1; i >= 0; i--) 
{ 
    if (words_in_family[i] != largest_family) 
    { 
     words_in_family.erase(words_in_family[i]); 
    } 
} 
+1

무슨 문제가 있습니까? –

+1

'벡터 <문자열, 벡터 >'... 벡터 선언이 잘못되었습니다. 컴파일 오류가 발생합니다. 벡터 선언 방법을 지정할 수 있습니까 –

+0

@SauravSahu 오버로드 된 함수에 대해 언급하고 코드가 실행되는'.erase.'에서 오류가 발생하지만 벡터 요소가 삭제되지 않습니다. – KnightValor

답변

1

erase 방법은 가치가 없습니다. 대신 erase 방법에 대한 파라미터로서 반복기를 사용

vector<vector<string>>::iterator it = words_in_family.begin(); 
for (int i = words_in_family.size() - 1; i >= 0; i--) 
{ 
    if (words_in_family[i] != largest_family) 
    { 
     words_in_family.erase(it+i); 
    } 
} 

반복자 소거 (반복자 위치); 반복자 삭제 (반복자 우선, 반복자 종료);

std :: vector의 반복기는 임의 액세스 반복기이므로 정수 값을 더하거나 뺄 수 있으므로 다른 유효한 반복기를 얻을 수 있습니다.

0
words_in_family.erase(words_in_family.begin()+i, words_in_family.begin()+i+1); 

소거는 경우, 인수

1

C++ std::vector 소거 요소로서 반복자를 취

:

그 값과 동일 largest_family하는 벡터 (words_in_family)에서 요소를 삭제

std::vector<std::vector<std::string>>::iterator Itr; 
for(Itr = Words_in_family.begin(); Itr != Words_in_family.end();) 
{ 
    if(*Itr == largest_family) 
    { 
     Itr = Words_in_family.erase(Itr); 
    } 
    else 
    { 
     Itr++; 
    } 
}