개발공부/C언어&C++
[C언어&C++] vector erase 활용
정보를드립니다
2020. 12. 24. 19:46
반응형
안녕하세요.
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 |
감사합니다.
반응형