Table of Contents
C++ – remove, remove_if, lambda
remove(), remove_if() 함수의 사용법을 정리해 봅니다.
remove
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
using namespace std;
int main() {
list<string> string_list;
string_list.push_back("1111");
string_list.push_back("2222");
string_list.push_back("3333");
string_list.push_back("4444");
// g++ test.cpp
list<string>::iterator iter;
for (iter = string_list.begin(); iter != string_list.end(); iter++) {
cout << iter->c_str() << endl;
}
// 리스트 사이즈가 바뀌지 않는다.
remove(string_list.begin(), string_list.end(), "2222");
for (iter = string_list.begin(); iter != string_list.end(); iter++) {
cout << iter->c_str() << endl;
}
}
lambda
아래에서 람다식을 사용하게 되는데 그전에 람다식을 설명합니다.
[변수캡쳐](파라미터)->int{ return 계산식; }
외부 변수를 함수내부에서 사용하기 위해 변수 캡쳐를 생성할 수 있습니다.
변수가 필요없다면 []
와 같이 비어있는 형식으로도 가능합니다.
리턴값을 생략가능하며 생략되면 컴파일러가 자동으로 유추합니다.
auto it_test = remove_if(string_list.begin(), string_list.end(),
[str1, str2](string str) {
return (str.compare(str1) == 0) || str.compare(str2) == 0;
}
);
위 예제에서 외부변수 두개를 받아왔고,
리스트에서 파라미터를 받습니다.
리턴값을 생략되었는데 컴파일러가 자동으로 bool 설정해 줍니다.
remove_if
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
using namespace std;
int main() {
list<string> string_list;
string_list.push_back("1111");
string_list.push_back("2222");
string_list.push_back("3333");
string_list.push_back("4444");
string str1 = "2222";
string str2 = "3333";
// g++ test.cpp
list<string>::iterator iter;
for (iter = string_list.begin(); iter != string_list.end(); iter++) {
cout << iter->c_str() << endl;
}
auto it_test = remove_if(string_list.begin(), string_list.end(),
[str1, str2](string str) {
return (str.compare(str1) == 0) || str.compare(str2) == 0;
}
);
string_list.erase(it_test, string_list.end());
for (iter = string_list.begin(); iter != string_list.end(); iter++) {
cout << iter->c_str() << endl;
}
}