반응형
안녕하세요.
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 |
감사합니다.
반응형
'개발공부 > C언어&C++' 카테고리의 다른 글
[C언어&C++] isalpha 함수(문자 알파벳 확인 함수) (0) | 2021.04.30 |
---|---|
[C언어&C++] rand, srand 함수 ( 난수(랜덤)생성 ) (0) | 2021.02.07 |
[C언어&C++] 16진수 문자열을 10진수로 변환하기 (0) | 2020.10.15 |
[C언어&C++] 특정 폴더 경로의 파일리스트 받아오기(파일리스트를 파일로저장) (0) | 2020.08.31 |
[C언어&C++] for문을 이용한 별찍기 (0) | 2020.03.10 |