c – 为什么不同类的STL算法调用不同?
我目前正在查看STL库,我想知道为什么对于矢量类向量< string>名称;我必须调用remove();如下:
names.erase(remove(names.begin(),names.end(),"Simon"),names.end()); 使用列表类列表时< string>名称;我可以调用函数如下: remove("Simon"); 我也注意到reverse(); for vector< string>名称;它被称为如下: reverse(names.begin(),names.end()); 而对于列表< string>名称;它被称为如下: names.reverse(); 总是调用矢量的方式更合适吗?为什么是这样?我对C很新,所以我很想知道最好的做事方式. 解决方法
基本上,有一些特殊情况与特定容器的性质有关.
通常,在< algorithm>中声明的自由函数std :: remove,std :: remove_if和std :: reverse. header将通过复制和移动元素对矢量,列表,deques和数组起作用. (当然,它们不会在集合或映射上工作,因为对于那些你不能随意重新排列元素的人.)请注意,std :: remove不会从容器中删除元素. 通常,每个容器类型的成员函数erase用于从该容器中删除元素. (注意,std :: array没有擦除,因为它的大小是固定的.) 有特殊情况: > std :: list提供反向,作为成员,因为只有成员函数可以保证它不会使任何迭代器无效;通用的std :: reverse不能. 通常,原则似乎是:标准库容器尽可能支持统一接口,但也提供额外的专用功能,以便提供依赖于其内部的功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |