반응형

Intro


안녕하세요. 이번에는 for문에서 vector.erase()를 사용하는 방법에 대해 포스팅 하겠습니다.

for문에서 Vector erase 사용하기


vector에 1, 3, 2, 1,1, 3, 2, 1,1, 3, 2, 1 를 넣고 값이 1인 값의 인덱스를 erase를 통해 삭제 해보도록 하겠습니다.

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> v;
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(4);
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(4);
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(4);

    cout << "Vector 값 출력 -----------------------" << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << endl;

    for (int i = 0; i < v.size(); i++) //vector에서 값이 1인 값을 삭제
        if (v[i] == 1)
            v.erase(v.begin(), v.begin()+i);

    cout << "일반 for문 erase vector 출력-----------------------" << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << endl;
}

결과

결과를 보고 엇? 뭐지 이러실수 있습니다. 제가 지우고 싶은 값은 vector의 값이 1인 index인데 결과를 보면 값이 1인 index가 전부 지워지지 않았습니다.
왜냐하면 일반적인 증감 for문에 vector.erase를 사용하면 정상적으로 작동하지 않습니다. erase함수는 해당 요소를 지운 후 지워진 요소 뒤의 요소를 가르키기 떄문입니다. 따라서, for문을 돌면서 erase를 통해 index의 vector의 값을 삭제하면서도 계속 for문에서 i값을 증감을 계속 하기 때문입니다. 그렇기 때문에 erase를 하지 않았을 때 i값을 증감시켜야 원하는 결과를 얻을 수 있습니다.

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector <int> v;
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(1);
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(1);
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(1);

    cout << "Vector 값 출력 -----------------------" << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << endl;

    for (int i = 0; i < v.size();)
        if (v[i] == 1)
            v.erase(v.begin() + i);
        else
            i++;


    cout << "erase vector 출력-----------------------" << endl;
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << endl;
}

for문 안에 i값을 증감하지 않고 erase를 하지 않았을 때 i값을 증감하면 원하는 결과를 얻을 수 있습니다.

마무리


이상으로 포스터를 마치겠습니다. 다음번에는 vector의 sort에 대해 알아보도록 하겠습니다.

반응형

+ Recent posts