常用STL总结
2015-08-08 09:46
369 查看
map
map特性是,所有的元素都会根据元素的键值自动排序,map 所有的元素都是pair; map不允许拥有相同的键值。
map 底层机制为 RB-tree, 即红黑树。 是一种平衡二叉搜索树。自动排序效果很不错。
map 中 swap 操作
swap 运行结果为
list
list 的 node 是 分为 prev, next 指针,以及数值 data。 list是个环状双向链表, 迭代器必须具备前移.后移的能力。相对 vector,list 是用多少就是多少空间,每次插入或者删除都配置一个元素空间。
list node
list Demo:
Vector
vector 是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 支持随机存取。 为降低空间配置速度成本,vector实际配置的大小可能比客户端需求量大些,以备可能的扩充。
vector用两个迭代器指向连续空间使用范围,以 end_of_storage 指向尾端(含备用空间)。
Refferencd:
《STL 源码剖析》 候捷
https://msdn.microsoft.com/en-us/library/ksxy3xeb.aspx
map特性是,所有的元素都会根据元素的键值自动排序,map 所有的元素都是pair; map不允许拥有相同的键值。
map 底层机制为 RB-tree, 即红黑树。 是一种平衡二叉搜索树。自动排序效果很不错。
map<string,int> simap; simap[string("C++")] = 1; simap[string("c#")] = 2; pair<string,int> value(string("jave"),3); simap.insert(value); map<string,int>::iterator simap_iter = simap.begin(); for(; simap_iter!= simap.end();simap_iter++) cout<<simap_iter->first <<" "<<simap_iter->second<<endl; map<string,int>::iterator itel; itel = simap.find[string("java")]; if(itel == simap.end()) cout<<"not found";
map 中 swap 操作
map <int, int> m1, m2; map <int, int>::iterator m1_Iter; typedef pair <int, int> Int_Pair; m1.insert ( Int_Pair ( 1, 10 ) ); m1.insert ( Int_Pair ( 2, 20 ) ); m1.insert ( Int_Pair ( 3, 30 ) ); m2.insert ( Int_Pair ( 10, 100 ) ); m2.insert ( Int_Pair ( 20, 200 ) ); cout << "The original map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl; // This is the member function version of swap //m2 is said to be the argument map; m1 the target map m1.swap( m2 ); cout << "After swapping with m2, map m1 is:"; for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ ) cout << " " << m1_Iter -> second; cout << "." << endl;
swap 运行结果为
The original map m1 is: 10 20 30. After swapping with m2, map m1 is: 100 200.
list
list 的 node 是 分为 prev, next 指针,以及数值 data。 list是个环状双向链表, 迭代器必须具备前移.后移的能力。相对 vector,list 是用多少就是多少空间,每次插入或者删除都配置一个元素空间。
list node
template <class T> struct _list_node{ typedef void* void_pointer; void_pointer prev; void_pointer next; T data; }
list Demo:
int i; list<int> ilist; ilist.push_back(0); ilist.push_back(1); ilist.push_back(3); list<int>::iterator ite; for(ite = ilist.begin();ite!=ilist.end();ite++) cout<<*ite<<endl; ite = find(ilist.begin(),ilist.end(),2); ilist.insert(ite,9); ite = find(ilist.begin(), ilist.end(),9); ilist.erase(ite);
Vector
vector 是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 支持随机存取。 为降低空间配置速度成本,vector实际配置的大小可能比客户端需求量大些,以备可能的扩充。
vector用两个迭代器指向连续空间使用范围,以 end_of_storage 指向尾端(含备用空间)。
class vector { ... protected: iterator start; iterator finish; iterator end_of_storage; ... }
Refferencd:
《STL 源码剖析》 候捷
https://msdn.microsoft.com/en-us/library/ksxy3xeb.aspx
相关文章推荐
- 客户端跳转与服务器端跳转的区别以及路径
- 慕课网 Java 入门 第二季 学习笔记
- 南邮 OJ 1983 比赛成绩排序问题II
- 安装双系统后Ubuntu下不能访问windows下磁盘解决方案
- 架构师速成8.3-可用性之分布式
- POJ Fibonacci 3070【矩阵快速幂】
- 关于mysql自增id的获取和重置
- 函数返回值的情况
- HDU 1426 Sudoku Killer
- HDU 1394 Minimum Inversion Number(暴力/线段树)
- Android WebView坑摘要
- Jquery获取select,dropdownlist,checkbox下拉列表框的值
- Java集合类详解
- android使用service和activity获取屏幕尺寸的方法
- java之redis篇(spring-data-redis整合)
- JAVA 信号量
- 南邮 OJ 1982 参赛选手信息更新问题II
- Java项目生成帮助文档教程
- 【第10篇】TypeScript类型比较《Type Compatibility》 案例代码详解
- centos5.8本地安装yum资源,安装软件包