首页 / 知识
关于c ++:如何从具有特定值的stl向量中删除项?
2023-04-13 23:05:00

How do I remove an item from a stl vector with a certain value?我查看了stl vector的API文档,发现vector类上没有允许删除具有特定值的元素的方法。这似乎是一个常见的操作,而且似乎奇怪的是,没有内置的方法来完成这项操作。
如果您想删除一个项目,下面的操作会更有效。
或者,如果订单对您不重要,您可以避免移动项目的开销:
使用全局方法std::remove和begin和end迭代器,然后使用std::vector.erase实际删除元素。 文档链接标准::删除http://www.cppreference.com/cppalgorithm/remove.html标准::vector.erase http://www.cppreference.com/cppvector/erase.html
感谢吉姆·巴克指出了我的错误。 其他的答案包括如何做好这件事,但我想我也会指出,这并不奇怪,这不在向量API中:它效率低下,通过向量线性搜索值,然后进行大量复制以删除它。 如果您正在集中执行此操作,那么出于这个原因考虑使用std::set是值得的。 如果您有一个未排序的向量,那么您可以简单地与最后一个向量元素交换,然后与 有了订好的集装箱,你最好还是带上? 较短的解决方案(不强制您重复向量名4次)是使用boost:
请参阅http://www.boost.org/doc/libs/1_64_0/libs/range/doc/html/range/reference/algorithms/new/remove_erase.html 另请参阅std::remove_if to be able to use a predicate… 下面是上面链接中的示例:
来自C++ 20: 一个非成员函数引入了 前任:
有两种方法可以用来特别删除项目。让我们取一个向量
1)非有效方式:虽然看起来效率很高,但不是因为擦除函数删除了元素并将所有元素向左移动1。所以它的复杂性是O(n^2)
2)有效方法(推荐):也称为擦除-删除习语。
删除算法的输出是:
因为REMOVE的返回类型是该范围的新结尾的迭代器。
现在使用vector的erase函数删除从新的元素到旧的元素。它需要O(1)次。
所以这个方法在O(n)中有效 如果你不想做任何额外的包括:
|
最新内容
相关内容
linux运维操作命令?
linux运维操作命令?,系统,网络,基础,标准,工具,信息,工作,命令,软件,数据,linux运维命令常用命令1、ls, ls-l, less, head, tail, tail -f, ln, ln -slinux默认命令删除?
linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,关于linux的删除命令1、命令格式:rm [选项] 文件… 命令功能:删除一linux清空操作命令?
linux清空操作命令?,系统,数据,命令,名称,不了,文件夹,文件,环境,回收站,目录,删除文件夹中所有文件的linux命令(创建和删除文件和文件夹的linlinux命令发现不了?
linux命令发现不了?,软件,系统,发行,工具,名称,不了,命令,地方,代理,信息,linux命令中的makewhatis命令,使用的时候提示未发现命令,怎搞好?_百linux安装操作命令?
linux安装操作命令?,系统,工作,地址,工具,服务,情况,信息,命令,最新,管理,linux系统常用操作命令1、linux常用命令有pwd命令、cd命令、ls命令linux删除空行命令?
linux删除空行命令?,名称,不了,命令,文件夹,文件,时间,工作,简介,情况,资料,linux如何清除csv文件空行1、linux如何清除csv文件空行?答案如下:首linux删除软件命令?
linux删除软件命令?,软件,系统,命令,不了,名称,数据,文件夹,文件,工具,百度,linux软件卸载命令1、linux卸载软件命令:apt-get,aptitude。Linux软linux删除集群命令?
linux删除集群命令?,软件,管理,工具,平台,工作,系统,技术,数据,公司,产品,在linux里怎么删除grid集群软件1、linux怎么卸载软件呢,下面就让我们linux操作系mv命令?
linux操作系mv命令?,名字,系统,软件,文件,命令,信息,地址,目录,文件夹,源文件,Linux中的文件与目录操作利器mv命令使用解析1、mv file_txt /holinux输入命令删除键?
linux输入命令删除键?,名称,系统,档案,命令,文件,目录,不了,数据,文件夹,终端,linux删除命令是什么Linux的文件和目录的删除命令有:rm、rmdir、linux操作命令大全图?
linux操作命令大全图?,工作,地址,系统,信息,命令,目录,控制台,功能,操作,内核,Linux实用命令有哪些?1、linux系统常用操作命令如下:ls:全拼list,linux删除群组的命令?
linux删除群组的命令?,系统,管理,工作,名称,命令,地址,邮箱,基础,密码,用户组,linux基础命令linux系统常用操作命令如下:ls:全拼list,功能是列出