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 ...
随机推荐
- MSC服务器-主从检测脚本-check_server_state.sh
说明: 发现keepalived会在凌晨自动进行主从切换,导致msc相关进程运行不稳定: 通过运行check_server_state.sh,及时终止/启动相关进程: 所有脚本使用supervisor ...
- Unity查找子物体的方式-怎么查找GameObject
Unity动态查找物体 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创 ...
- NYOJ 6:喷水装置(一)(贪心)
6-喷水装置(一) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:68 提交数:111 难度:3 题目描述: 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水 ...
- 基础练习 2n皇后问题
时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同 ...
- 【HDOJ1531】【差分约束+添加超级源点】
http://acm.hdu.edu.cn/showproblem.php?pid=1531 King Time Limit: 2000/1000 MS (Java/Others) Memory ...
- js---通配符选择器
原味转自:http://blog.sina.com.cn/s/blog_6e001be701017kaz.html 1.选择器 (1)通配符: $("input[id^='code']&qu ...
- React中jquery引用
安装jQuery npm i jquery -S 在那个地方使用jQuery就在什么地方引入jQuery import $ from 'jquery'
- Android命令行工具学习总结
15.setting命令 setting命令可以很方便的更改系统设置中的参数(如修改系统默认输入法) 安卓Settings模块浅析:https://www.jianshu.com/p/ed8508fe ...
- Stateful Kubernetes Applications Made Easier: PSO and FlashBlade
转自:https://medium.com/@joshua_robinson/stateful-kubernetes-applications-made-easier-pso-and-flashbla ...
- 使用netlify-statuskit 进行系统业务状态报告
netlify-statuskit 是netlify 团队开源的一款类似github status 的脚手架website,使用此工具 我们可以对于我们系统模块进行报告,同时对于故障时,我们可以进行故 ...