【翻译】std::remove - C++ Reference
函数模板
std::remove 头文件<algorithm>
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
从一个范围中删除某值
[注释:本文是 std::remove 算法的参考手册,关于 <cstdio.h> 头文件下的 remove 函数,请参见:http://www.cplusplus.com/reference/cstdio/remove/]
对范围 [first , last ) 进行转换(transform),移除其中所有与 val 相等的元素,返回一个指向新范围的 end 的迭代器。
(译注:transform 是 STL 的一个算法,不知道 std::remove 的底层是否经由 std::transform 实现。)
函数不改变所包含的“范围对象”的属性(换句话说,函数不改变数组或者容器的真实 size ):元素被移动是通过下一个不等于 val 的元素,来替换当前等于 val 的元素,而且会通过返回一个指向新 end 的迭代器,来指示出新的稍“短”一些的范围(返回的迭代器所指向的元素是新的 past-the-end 元素)。
元素间的顺序不会改变。介于返回的迭代器和 last 迭代器间的元素仍然有效,但是状态是未定义的。
函数使用 operator== 来逐个比较元素与 val 是否相等。
C++11下或如何实现
元素的替换通过 move-assigning 一个新值来实现。
可能通过如下函数模板来实现:
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator result = first;
while (first!=last) {
if (!(*first == val)) {
*result = move(*first);
++result;
}
++first;
}
return result;
}
函数形参
# first,last
指向 move-assignable 序列首部和尾部的前向迭代器,用它们来支持元素和类型为 T 的值进行比较。迭代器指向的范围是 [ first, last ),这包括了 first 和 last 之间—— first 所指向的元素和 last 之前的元素。
# val
将被移除的元素的值。
返回值
一个指向最后一个没被移除的元素的迭代器。
first 和这个迭代器的范围之间,包括了所有不等于 val 的元素。
使用示例
// remove algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::remove int main () {
int myints[] = {,,,,,,,}; // 10 20 30 30 20 10 10 20 // bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^ pend = std::remove (pbegin, pend, ); // 10 30 30 10 10 ? ? ?
// ^ ^
std::cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
std::cout << ' ' << *p;
std::cout << '\n'; return ;
}
输出:
range contains:
复杂度
复杂度是与 first 和 last 之间的距离(C++ STL 的函数)线性相关,即函数调用会与每一个元素进行比较,而且可能对其中的一些元素进行赋值。
数据簇
函数会访问、可能修改 [ first , last ) 范围之间的对象。
异常
元素比较(element comparisons)时可能抛出异常,元素赋值或者赋值操作作用于迭代器时,可能抛出异常。
注意,对于无效的参数会造成未定义的行为。
参阅
remove_if
remove_copy
replace
count
find
原文地址:http://www.cplusplus.com/reference/algorithm/remove/
【翻译】std::remove - C++ Reference的更多相关文章
- Error response from daemon: conflict: unable to remove repository reference 解决方案
由于前一章演示用的镜像没什么用准备删除 docker image rm hello-world:latest Error response from daemon: conflict: unable ...
- C++ 标准库 std::remove
参见:https://zh.cppreference.com/w/cpp/algorithm/remove std::remove 不会改变输入vector / string 的长度.其过程,相当于去 ...
- 【翻译】std::list::remove - C++ Reference
公有成员函数 std::list::remove void remove(const value_type& val); 删除与给定值相等的元素 从容器中删除所有与 val 值相等的元素.li ...
- std::remove
#include <algorithm> template< class ForwardIt, class T > ForwardIt remove( ForwardIt fi ...
- 令人疑惑的 std::remove 算法
摘自<Effective STL>第32条 remove的声明: template<class ForwardIterator, class T> ForwardIterato ...
- docker删除镜像Error response from daemon: conflict: unable to remove repository reference
Docker无法删除images,由于是依赖container. 1.进入root权限 sudo su 2. 列出所有运行或没有运行的镜像 docker ps -a 3.停止containe ...
- LLVM 编码规范 - 中文翻译
LLVM 编码规范 导论 语言.库和标准 C++ 标准版本 C++ 标准库 Go 代码准则 机械的代码问题 代码格式化 注释 头文件 类概述 method information 注释格式化 使用Do ...
- (翻译)什么是Java的永久代(PermGen)内存泄漏
http://www.codelast.com/?p=7248 转载请注明出处:http://www.codelast.com/ 本文是我对这篇文章的翻译:What is a PermGen leak ...
- Effective Modern C++翻译(7)-条款6:当auto推导出意外的类型时,使用显式的类型初始化语义
条款6:当auto推导出意外的类型时,使用显式的类型初始化语义 条款5解释了使用auto来声明变量比使用精确的类型声明多了了很多的技术优势,但有的时候,当你想要zag的时候,auto可能会推导出了zi ...
随机推荐
- 专访msup创始人兼CEO刘付强:追求卓越是数据时代下企业和个人的生存之道
近些年,"信息化带动工业化"策略的深入人心,这为信息技术本身开辟了一个更加广阔的应用天地,在这样的大环境下国内IT培训市场得了飞速发展.那么在云计算.大数据时代,如何让企业的IT团 ...
- Linux下pip使用国内源
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/si ...
- REDIS 六. 修复方案
六. 修复方案 6.1 禁止一些高危命令(重启redis才能生效) 修改 redis.conf 文件,禁用远程修改 DB 文件地址 rename-command FLUSHALL "&quo ...
- router-link params传参
1.router.js配置 需要在路径后定义上要传的属性名 --> /:属性名(query方式不需要) { path: '/CreateProgress/:name1', name: ...
- webstorm添加调试nodejs
打开run菜单选择Edit Configurations 展开defaults菜单,选择nodejs 点击+按钮,选择Node.js,出现下面弹出框. 点击ok保存
- 深入浅出REST(转载)
add by zhj: 参考http://zh.wikipedia.org/zh/REST 需要注意的是,REST是设计风格而不是标准,它也并没有与哪种协议绑定.不过,我们常按REST设计风格来使用H ...
- 解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例
在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处 ...
- MySQL数据库参数
数据库参数 MYSQL数据库的参数配置一般在my.ini配置文件中修改/添加(部分参数也可以用set global 参数名=值 做临时调整,重启后失效),配置完后需要重启数据库才生效. 参数1:inn ...
- 005-四种常见的 POST 提交数据方式
1.http请求方法 HTTP Method RFC Request Has Body Response Has Body Safe Idempotent Cacheable GET RFC 7231 ...
- bootstrap modal插件弹出窗口如何限制最大高度,并且在内容过多时可以滚动显示
.modal-body{ max-height:400px; overflow-y:auto; } 只有在modal-body类上限制高度才能起作用,其他地方的限制均不起作用