반응형

안녕하세요.

vecter에서 특정 데이터를 삭제할 때는 erase를 사용합니다.

간단하게 다음과 같이 삭제하면 될거같은데, 에러가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <vector>
using namespace std;
 
void main()
{
    vector<int> v;
 
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
 
    for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
    {
        if ( *iter == 3 )
        {
            v.erase(iter);
        }
    }
 
    for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
    {
        printf("%d\n"*iter);
    }
    printf("size : %d\n", v.size());
}
cs

 

vector 이터레이터(iterator)가 더이상증가할 수 없다고 나옵니다.

 

해결 코드

earse후에 반환되는 이터레이터(iterator)가 있습니다.
erase후 반환 이터레이터(iterator)를 넣어줍니다.

v.erase(iter);

이렇게 변경합니다. iter = v.erase(iter); 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <vector>
using namespace std;
 
void main()
{
    vector<int> v;
 
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
 
    for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
    {
        if ( *iter == 3 )
        {
            iter = v.erase(iter);
        }
    }
 
    for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
    {
        printf("%d\n"*iter);
    }
    printf("size : %d\n", v.size());
}
cs

 

이터레이터(iterator)를 사용하지 않는 경우는 다음과 같이 구현합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <vector>
using namespace std;
 
void main()
{
    vector<int> v;
 
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
 
    for (int i = 0; i < v.size(); i++)
    {
        if ( v[i] == 3 )
        {
            v.erase(v.begin()+i);
        }
    }
 
    for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
    {
        printf("%d\n"*iter);
    }
    printf("size : %d\n", v.size());
}
cs

 

감사합니다.

반응형

+ Recent posts