우리가 STL에서 어떤 요소를 삭제하려면 굉장히 귀찮은 작업을 했었다.
기존의 STL Vector에서의 요소 삭제 코드
int main()
{
std::vector<int> vec = { -1, 1, -2, 2, -3, 3};
for (auto it = vec.begin(); it != vec.end();)
{
auto value = *it;
if (value < 0)
{
it = vec.erase(it);
}
else
{
++it;
}
}
return 0;
}
위와 같이 삭제 코드가 굉장히 길고 실수할 여지가 다분하다.
그래서 뒤에 나온 remove_if를 이용해서 삭제를 했었다.
int main()
{
std::vector<int> vec = { -1, 1, -2, 2, -3, 3 };
auto newEnd = std::remove_if(vec.begin(), vec.end(), [](int n) { return n < 0; });
vec.erase(newEnd, vec.end());
return 0;
}
드디어 erase_if가 나와서 좀 더 편하게 사용할 수 있다.
int main()
{
std::vector<int> vec = { -1, 1, -2, 2, -3, 3 };
std::erase(vec, 2); // 2만 삭제.
std::erase_if(vec, [](int n) { return n < 0; }); // 0보다 작은 것들 삭제.
return 0;
}
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - Calendar (0) | 2024.01.17 |
---|---|
C++20 - 비트연산 (0) | 2024.01.17 |
C++20 - Template Parameter for Lambda (0) | 2023.12.28 |
C++20 - NonType Template Parameter (0) | 2023.12.28 |
C++20 - Conditionally Explicit Constructor (조건부 Explicit 생성자) (1) | 2023.12.27 |