在stl中既有通用函数,又有相同成员函数主要表现在list中。
以remove为例
list<int> coll;
// insert elements from 6 to 1 and 1 to 6
for (int i=1; i<=6; ++i) {
coll.push_front(i);
coll.push_back(i);
}
// print all elements of the collection
cout << "pre: ";
copy (coll.cbegin(), coll.cend(), // source
ostream_iterator<int>(cout," ")); // destination
cout << endl;
// remove all elements with value 3
remove (coll.begin(), coll.end(), // range
3);
开始是list中的元素为6 5 4 3 2 1 1 2 3 4 5 6
remove之后变成6 5 4 2 1 2 4 5 6 5 6
remove算法具有linear complexity是将容器中的等于value的值得元素使用后续的元素进行替换,这就需要进行deference。因此只是调整元素的位置,而不是真正的删除。
函数返回的是A forward iterator addressing the new end position of the modified range, one past the final element of the
remnant sequence free of the specified value
然而在list中也提供了一个remove的成员函数,他是直接删除元素。它删除元素不需要移动元素,只需要进行相应的指针操作。因此具有更好的性能。
template <class _Tp, class _Alloc>
void list<_Tp, _Alloc>::remove(const _Tp& __value)
{
iterator __first = begin();
iterator __last = end();
while (__first != __last) {
iterator __next = __first;
++__next;
if (*__first == __value) erase(__first);
__first = __next;
}
}
所以在选择通用算法和成员函数时,比较具有good performance(具有constant or linear complexity)。
分享到:
相关推荐
第二篇C++ STL 技术原理和组成 第3 章STL 技术原理· · · · · · · · · · · · · · · · · ·................................. 103 3-1 模板概述· · · · · · • · · · · · · · · · ·...
算法由模板函数体现,这些函数不是容器类的成员函数,是独立的函数,它们可以用于STL容器,也可以用于普通的C++数组等. 头文件:#include 在STL的泛型算法中有4类基本的算法: 1)变序型队列算法: 可以改变容器内的数据...
8.2.2 针对成员函数而设计的函数配接器 83 9 STL算法 85 9.1 算法头文件 85 9.2 算法概览 85 9.2.1 简介 85 9.2.2 算法分类 85 9.3 辅助函数 85 9.4 for_each()算法 86 9.5 非变动性算法 88 9.5.1 元素计数 88 9.5.2...
一共分为四部分 第一部分 C++语言 1,C++程序设计概述 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计
一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计
一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计
一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计
23.4 const成员函数与mutable 23.5 volatile成员函数 23.6 explicit构造函数 23.7 成员初始化语法 23.8 利用关键字asm 23.9 连接说明 23.10 基于数组的I/O 23.11 C与C++的区别 第24章 标准模板库 24.1 STL概述 24.2 ...
它体现了一种通用和泛化的思想。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset. 17.你如何理解MVC。简单举例来说明其应用。 MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构...
介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承问题的难点,展示RTTI的实际使用,描述了典型的设计模式及其实现,特别介绍被认为是标准C++下一版特征之一的多线程处理...
·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素 ·举例说明如何使用mfc开发本地windows应用程序 ·指导读者用c++和c++/cli设计和创建大量的windows应用程序 ...
11_项目中检索内存泄漏使用和基本原理 12_动态库基本知识和环境调试注意 13_动态库内存释放问题 源码及文档 01_上一次课程回顾 02_链表热身_结构体中套元素和指针 03_结构体数据类型的嵌套定义和函数的嵌套调用是两...