C++ 원소 삭제하기 remove

Notepad96

·

2020. 11. 18. 14:13

300x250

 

 

 

 

1. remove

 

remove 함수는 algorithm 라이브러리의 포함되어 있다.

 

 

인자로 반복자들과 삭제할 원소값을 받으며 해당 원소를 찾으면 삭제한다.

 

 

 

 

단, 여기서 삭제는 완전한 삭제가 아니므로 추가적인 작업(resize)을 해주어야 한다.

 

 

 

 


2. 코 드

환경 : Visual studio 2019

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

int main() {
	vector<int> v = { 10, 20, 30, 40, 30, 20, 10, 10, 40, 50 };

	
	for (int i : v) cout << i << " ";
	cout << "\n========================================\n";

	auto it = remove(v.begin(), v.end(), 10);
	v.resize( it - v.begin());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}
	cout << "\n========================================\n";


	it = remove_if(v.begin(), v.end(), [](int n) { return n > 30; });
	v.resize(it - v.begin());

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}
	cout << "\n========================================\n";

	return 0;
}
 
 

- remove 함수는 인자로 (시작 반복자, 종료 반복자, 삭제할 원소 값) 을 갖는다.

 
 
 

- remove를 해주어도 해당 원소들만 삭제되어 주는 깨끗한 상태가 되지 않는다. (vector의 크기 변화 X)

따라서 remove의 반환되는 반복자를 이용하여 vector를 resize 해주어야 한다.

 
 
 

- remove_if 함수는 remove에서는 특정 원소 값을 지정하였다면 remove_id에서는 조건을 주어 해당 조건을 만족하는 원소에 대하여 삭제를한다.

 
 
 
 
 

3. 참 조

 
 

remove - C++ Reference

12345678910111213 template ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val) { ForwardIterator result = first; while (first!=last) { if (!(*first == val)) { *result = move(*first); ++result; } ++first; } return result; }

www.cplusplus.com

 

 

300x250

'C++ > STL' 카테고리의 다른 글

C++ min, max 함수  (0) 2020.11.19
C++ time, clock 시간 측정, 현재 시간 구하기  (0) 2020.11.18
C++ 값 회전하기 rotate  (0) 2020.11.18
C++ 거꾸로 뒤집기 reverse  (0) 2020.11.17
C++ map value sort - 맵 값 정렬  (0) 2020.11.17