이 글은 C++ 마이너 갤러리에서 쓰여진 글입니다. C++ 유저들 컴컴!

https://gall.dcinside.com/mgallery/board/view/?id=cplpl&no=14&page=1



갤 초기니까 가벼운 주제로 써 보겠습니다.


C++17 까지는 vector 에서 특정 원소가 여러 번 등장하는데 이걸 전부 지우고 싶을 때

매우 귀찮은 코드를 써야 했습니다.



#include <algorithm> #include <iostream> #include <vector> using namespace std; void print(const vector<int>& v) { for (auto n : v) { cout << n << ' '; } cout << 'n'; } int main() { vector<int> v {1, 2, 3, 3, 5, 3, 6, 7, 3, 8}; print(v); v.erase(remove(v.begin(), v.end(), 3), v.end()); print(v); }



remove-erase idiom이라고 하는데 아무래도 븅신 같습니다.

remove 라는 함수명을 보면 왠지 지우는 것까지 완료해 줘야 할것 같잖아요. 처음 보는 사람한테는 혼란스럽죠.


이로 인해 C++20 부터는 std::erase 한방으로 훨씬 더 직관적으로 지울 수 있게 되었습니다.

단, v.erase()가 아니라, std::erase(v, 3)이 됩니다.


#include <algorithm> #include <iostream> #include <vector> using namespace std; void print(const vector<int>& v) { for (auto n : v) { cout << n << ' '; } cout << 'n'; } int main() { vector<int> v {1, 2, 3, 3, 5, 3, 6, 7, 3, 8}; print(v); erase(v, 3); // C++20 print(v); }


실행 결과: https://wandbox.org/permlink/BIZYv4FkoscPrnZL


이제 깔끔하게 std::erase(v, elem);으로 지우세요!