지우기 방법을 사용하여 벡터에서 요소를 지우고 싶습니다. 그러나 여기서 문제는 요소가 벡터에서 한 번만 발생한다는 보장이 없다는 것입니다. 여러 번 나타날 수 있으며 모두 지워야합니다. 내 코드는 다음과 같습니다.
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
이 코드는 벡터를 반복하는 동안 벡터의 끝을 변경하기 때문에 분명히 충돌합니다. 이를 달성하는 가장 좋은 방법은 무엇입니까? 즉, 벡터를 여러 번 반복하거나 벡터의 복사본을 하나 더 만들지 않고도이를 수행 할 수있는 방법이 있습니까?
std::remove()
제거 할 요소를 덮어 쓰도록 요소를 이동합니다. 알고리즘은 컨테이너의 크기를 변경하지 않으며n
요소가 제거되면 마지막n
요소 가 정의되지 않습니다 .