C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- std::array
- std::vector
- std::vector<T,Allocator>::push_back
- std::vector<T,Allocator>::assign
- std::vector<T,Allocator>::get_allocator
- std::vector<T,Allocator>::operator[]
- std::vector<T,Allocator>::front
- std::vector<T,Allocator>::at
- std::vector<T,Allocator>::pop_back
- std::vector<T,Allocator>::end, std::vector<T,Allocator>::cend
- std::vector<T,Allocator>::vector
- std::vector<T,Allocator>::~vector
- std::vector<T,Allocator>::operator=
- std::vector<T,Allocator>::back
- std::vector<T,Allocator>::data
- std::vector<T,Allocator>::begin, std::vector<T,Allocator>::cbegin
- std::vector<T,Allocator>::rbegin, std::vector<T,Allocator>::crbegin
- std::vector<T,Allocator>::rend, std::vector<T,Allocator>::crend
- std::vector<T,Allocator>::empty
- std::vector<T,Allocator>::size
- std::vector<T,Allocator>::max_size
- std::vector<T,Allocator>::reserve
- std::vector<T,Allocator>::capacity
- std::vector<T,Allocator>::shrink_to_fit
- std::vector<T,Allocator>::clear
- std::vector<T,Allocator>::insert
- std::vector<T,Allocator>::emplace
- std::vector<T,Allocator>::erase
- std::vector<T,Allocator>::emplace_back
- std::vector<T,Allocator>::resize
- std::vector<T,Allocator>::swap
- std::swap(std::vector)
- std::erase, std::erase_if (std::vector)
- operator==,!=,<,<=,>,>=,<=>(std::vector)
- std::vector 的推导指引
- std::map
- std::unordered_map
- std::priority_queue
- std::span
- std::forward_list
- std::deque
- std::list
- std::set
- std::multiset
- std::multimap
- std::unordered_set
- std::unordered_multiset
- std::unordered_multimap
- std::stack
- std::queue
- std::vector<bool>
- 结点把柄 (C++17)
- 注释
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
位置:首页 > C++ 参考手册 >容器库 >std::vector > std::erase, std::erase_if (std::vector)
std::erase, std::erase_if (std::vector)
定义于头文件 <vector>
|
||
template< class T, class Alloc, class U > constexpr typename std::vector<T,Alloc>::size_type |
(1) | (C++20 起) |
template< class T, class Alloc, class Pred > constexpr typename std::vector<T,Alloc>::size_type |
(2) | (C++20 起) |
1) 从容器中擦除所有比较等于
value
的元素。等价于
auto it = std::remove(c.begin(), c.end(), value); auto r = std::distance(it, c.end()); c.erase(it, c.end()); return r;
2) 从容器中擦除所有满足
pred
的元素。等价于
auto it = std::remove_if(c.begin(), c.end(), pred); auto r = std::distance(it, c.end()); c.erase(it, c.end()); return r;
参数
c | - | 要从中擦除的容器 |
value | - | 要擦除的值 |
pred | - | 若应该擦除元素则返回 true 的一元谓词。 对每个(可为 const 的) |
复杂度
线性。
示例
运行此代码
#include <iostream> #include <numeric> #include <vector> void print_container(const std::vector<char>& c) { for (auto x : c) { std::cout << x << ' '; } std::cout << '\n'; } int main() { std::vector<char> cnt(10); std::iota(cnt.begin(), cnt.end(), '0'); std::cout << "Init:\n"; print_container(cnt); std::erase(cnt, '5'); std::cout << "Erase \'5\':\n"; print_container(cnt); std::erase_if(cnt, [](char x) { return (x - '0') % 2 == 0; }); std::cout << "Erase all even numbers:\n"; print_container(cnt); }
输出:
Init: 0 1 2 3 4 5 6 7 8 9 Erase '5': 0 1 2 3 4 6 7 8 9 Erase all even numbers: 1 3 7 9
参阅
移除满足特定判别标准的元素 (函数模板) |