반응형
개요
vector에서 erase를 통해 특정 위치에 있는 원소를 삭제할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.erase(v.begin()); // 첫번째 원소 삭제
for (auto n : v)
{
cout << n << ' ';
}
return 0;
}
|
cs |
첫번째 원소인 1이 삭제된 모습.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
// index 3 원소 삭제(4번째 원소 삭제)
v.erase(v.begin() + 3);
for (auto n : v)
{
cout << n << ' ';
}
return 0;
}
|
cs |
4번째 원소인 4가 삭제된 모습.
범위를 지정해서 원소를 삭제할 수도 있다.
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
|
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
// [a, b) -> a부터 b - 1까지 삭제한다.
// 2번째 원소부터 3번째 원소 삭제
v.erase(v.begin()+1, v.begin()+3);
for (auto n : v)
{
cout << n << ' ';
}
return 0;
}
|
cs |
2번째 원소부터 3번째 원소까지 삭제된 모습
그렇다면 vector에서 특정 원소만 삭제하는 법은?
for문을 돌면서 해당 index의 원소가 특정값일 경우 삭제한다.
그리고 index를 1감소 시켜줘야 한다.
감소시켜주지 않으면 다음과 같은 오류가 발생한다.
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
28
|
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(5);
v.push_back(5);
v.push_back(3);
v.push_back(2);
v.push_back(5);
for (int i = 0; i < v.size(); i++)
{
if (v[i] == 5)
{
v.erase(v.begin() + i);
}
}
for (auto n : v)
{
cout << n << ' ';
}
return 0;
}
|
cs |
첫번째 원소가 5이므로 5를 지우고, 나머지 원소들을 앞으로 당겨주면
이렇게 되고, i가 증가하면 다시 1부터 검사하기 때문에 2번째 5가 지워지지 않는 모습.
따라서 5를 지웠을 때는 i값을 1감소 시켜줘야한다.
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
28
29
|
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(5);
v.push_back(5);
v.push_back(3);
v.push_back(2);
v.push_back(5);
for (int i = 0; i < v.size(); i++)
{
if (v[i] == 5)
{
v.erase(v.begin() + i);
i--; // 추가
}
}
for (auto n : v)
{
cout << n << ' ';
}
return 0;
}
|
cs |
정상적으로 결과가 출력된다.
반응형
'언어 > C++' 카테고리의 다른 글
[C++] 프로그램 실행 순서 (0) | 2022.07.13 |
---|---|
[C++] 가상 함수 (virtual) (0) | 2022.07.10 |
인수 목록이 일치하는 생성자의 인스턴스가 없습니다. 인수형식이 const char입니다. 오류 (0) | 2022.03.10 |
[C++] 깊은 복사와 얕은 복사 (0) | 2022.03.08 |
[C++] Upper_bound, Lower_bound (0) | 2022.02.13 |