STL进阶--成员函数 vs 算法
容器的成员函数 vs 算法
容器中同名的函数
- List:
void remove(const T); template<class Comp> void remove_if(Comp);
void unique(); template<class Comp> void unique(Comp);
void sort(); template<class Comp> void sort(Comp);
void merge(list&); template<class Comp> void merge(Comp);
void reverse();
- 关联容器:
size_type count(const T&) const;
iterator find(const T&) const;
iterator lower_bound(const T&) const;
iterator upper_bound(const T&) const;
pair<iterator,iterator> equal_range (const T&) const;
// 注: 没有一般形式的版本, 因为容器定义了比较
- 无序容器:
size_type count(const T&) const;
iterator find(const T&);
std::pair<iterator, iterator> equal_range(const T&);
// 注:没有一般形式的版本,使用hash函数搜索
对比
- 例子1:unordered_set
unordered_set<int> s = {2,4,1,8,5,9}; // Hash表
unordered_set<int>::iterator itr;
// 成员函数
itr = s.find(4); // O(1)
// 算法
itr = find(s.begin(), s.end(), 4); // O(n)
- 例2:map
map<char, string> mymap = {{'S',"Sunday"}, {'M',"Monday"}, {'W', "Wendesday"}, ...};
// 成员函数
itr = mymap.find('F'); // O(log(n))
// 算法
itr = find(mymap.begin(), mymap.end(), make_pair('F', "Friday")); // O(n)
- 例3:list
list<int> s = {2,1,4,8,5,9};
// 成员函数
s.remove(4); // O(n)寻找,O(1)删除
// s: {2,1,8,5,9}
// 算法
itr = remove(s.begin(), s.end(), 4); // O(n)寻找,O(n)删除
// s: {2,1,8,5,9,9}
s.erase(itr, s.end());
// s: {2,1,8,5,9}
// 排序
//
// 成员函数
s.sort();
// 算法
sort(s.begin(), s.end()); // 未定义的行为,算法sort要求随机访问迭代器
// remove_if()和unique()算法也类似
总结
通常情况下,偏向于成员函数版本。因为成员函数知道容器的数据结构,从而可以利用这一点找到最有效的方法来执行相应的任务。
STL进阶--成员函数 vs 算法的更多相关文章
- STL区间成员函数及区间算法总结
STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间 ...
- STL容器 成员函数 时间复杂度表
Sequence containers Associative containers Headers <vector> <deque> <list> <s ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- C++STL(vector,map,set,list)成员函数整理
/ *最近ACM比赛,用到的时候忘记成员函数了,贼尴尬,给以后比赛做下准备 */ LIST: 构造函数 list<int> c0; //空链表 list<int> c1(3); ...
- C++STL(vector,map,set,list,bitset,deque)成员函数整理
补充: vector 删除指定元素: vec.erase(remove(vec.begin(), vec.end(), val), vec.end());remove()返回的是删 ...
- c++ STL stack容器成员函数
这是后进先出的栈,成员函数比较简单,因为只能操作栈顶的元素.不提供清除什么的函数. 函数 描述 bool s.empty() 栈是否为空(即size=0).若空,返回true,否则,false. vo ...
- C++_进阶之函数模板_类模板
C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...
- C/C++ 类成员函数指针 类成员数据指针
普通函数指针: "return_type (*ptr_name)(para_types) " 类成员函数指针: "return_type (class_name::*p ...
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
随机推荐
- markdown-to-html.min.js
直接改成 false 不执行这里 不然异步了
- CodeForces - 1097F:Alex and a TV Show (bitset & 莫比乌斯容斥)
Alex decided to try his luck in TV shows. He once went to the quiz named "What's That Word?!&qu ...
- 小白入门photoscan
1.安装 我装的是photoscanPro 1.4.5版本.[注]:刚开始是在官网上下载的,要收费就点了试用,结果当我等了一天把将近200张图片处理完后,告诉我试用版不能保存文件...(绝望-_- - ...
- 代码basic讲解
key1 import os g = os.walk(r'D:\Users\Quincy_C\PycharmProjects\S6')print(next(g))print(next(g)) 第一次n ...
- C# 敏捷1
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; ...
- 《DSP using MATLAB》Problem 5.14
说明:这两个小题的数学证明过程都不会,欢迎博友赐教. 直接上代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- hdu3613 Best Reward manacher+贪心+前缀和
After an uphill battle, General Li won a great victory. Now the head of state decide to reward him w ...
- LeetCode – Number of Islands
Given a -d grid map of 's (water), count the number of islands. An island is surrounded by water and ...
- OpenGL编程-OpenGL框架-win32项目
在win32项目中开发的程序 小知识: 控制台应用程序运行就是dos的界面 项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的 程序运行结果是这样的 源代码:对第45行进行覆盖 # ...
- XML基础入门
一.概念 XML: Extensible markup Language,可拓展标记语言 功能:存储数据 1.配置文件 2.在网络中传输数据 html和xml的区别: 1.xml标记全是自定义的 2 ...