std::vector::erase(3)
β¨ std::vector::erase(3) β C++ Standard Libary π
okay so bestie, this is the std::vector::erase(3) page from the C++ Standard Libary, and it is literally here to teach you how to remove elements from a std::vector without causing absolute chaos. no cap. π
π NAME π
std::vector::erase β std::vector::erase (yes, the NAME section is serving self-referential main character energy β¨)
πΈ Synopsis πΈ
iterator erase( iterator pos ); (until C++11)
iterator erase( const_iterator pos ); (since C++11)
(constexpr since C++20)
iterator erase( iterator first, iterator last ); (1) (until C++11)
iterator erase( const_iterator first, const_iterator last ); (2) (since C++11)
(constexpr since C++20)
Erases the specified elements from the container. iconic behavior, honestly.
- Removes the element at
pos. - Removes the elements in the range
[first, last).
π¨ vibe check / danger alert: iterators (including the end() iterator) and references to the elements at or after the point of the erase are invalidated. do not touch them after, bestie. π
The iterator pos must be valid and dereferenceable. Thus the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos. fr fr.
The iterator first does not need to be dereferenceable if first == last: erasing an empty range is a no-op. slay, no drama.
π§ Parameters π§
posβ iterator to the element to remove.first,lastβ range of elements to remove.
π Type requirements π
Tmust meet the requirements ofMoveAssignable.
π₯ Return value π₯
Iterator following the last removed element. that's the return vibe, okay?
- If
posrefers to the last element, then theend()iterator is returned. - If
last == end()prior to removal, then the updatedend()iterator is returned. If[first, last)is an empty range, thenlastis returned.
π Exceptions π
Does not throw unless an exception is thrown by the assignment operator of T. so if T's assignment operator starts acting up, that is the exception tea. π«
π Complexity π
Linear: the number of calls to the destructor of T is the same as the number of elements erased, the assignment operator of T is called the number of times equal to the number of elements in the vector after the erased elements. it's giving linear, bestie. β
π¦ Notes π¦
When container elements need to be erased based on a predicate, rather than iterating the container and calling unary erase, the iterator range overload is generally used with std::remove()/std::remove_if() to minimise the number of moves of the remaining (non-removed) elements, this is the erase-remove idiom. iykyk.
std::erase_if() replaces the erase-remove idiom. (since C++20) periodt.
π Example π
run this code, bestie β it is the exact example from the page:
// Run this code
#include <vector>
#include <iostream>
void print_container(const std::vector<int>& c)
{
for (int i : c)
std::cout << i << ' ';
std::cout << '\n';
}
int main()
{
std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
print_container(c);
c.erase(c.begin());
print_container(c);
c.erase(c.begin() + 2, c.begin() + 5);
print_container(c);
// Erase all even numbers
for (std::vector<int>::iterator it = c.begin(); it != c.end();)
{
if (*it % 2 == 0)
it = c.erase(it);
else
++it;
}
print_container(c);
}
β¨ Output β¨
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 6 7 8 9
1 7 9
π Defect reports π
The following behavior-changing defect reports were applied retroactively to previously published C++ standards β yes, the receipts go back, bestie:
- DR
LWG 151, applied toC++98: behavior as published βfirstwas required to be dereferenceable, which made the behavior of clearing an empty vector undefined; correct behavior β not required iffirst == last. - DR
LWG 414, applied toC++98: behavior as published β iterators at the point of erase were not invalidated; correct behavior β they are also invalidated.
π See also π
erase(std::vector)β erases all elements satisfying specific criteria.erase_if(std::vector)β (function template) (C++20).clearβ clears the contents (public member function).
π source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::vector::erase(3) β bye bestie, go erase responsibly! π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms