STL(Standard Template Library),即标准模版库,涵盖了经常使用的数据结构和算法,并具备跨平台的特色。STL是C++标准函数库的一部分,以下图所示:算法
STL含有容器、算法和迭代器组件,其之间的合做以下图所示:数组
STL的底层机制都是以RB-tree(红黑树)完成的。一个红黑树是一棵二叉树。数据结构
std::string不能初始化为NULL。数据结构和算法
向量(vector) 连续存储的元素。函数
vector和数组相似,拥有一段连续的内存空间,且起始地址不变,所以能很是好的支持随机存储。ui
为了提升效率,vector在添加元素以前最好调用reserve()设置容量。spa
(1)清空.net
std::vector<std::string> str; std::vector<std::string>().swap(str); str.clear();
(2)删除符合条件的元素指针
vector<int> iVec; vector<int>::iterator it; for(it=iVec.begin();it!=iVec.end();) { if(*it == 0) { it=iVec.erase(it);//删除元素,返回值指向已删除元素的下一个位置 } else { ++it;//指向下一个位置 } }
注意:每次调用erase()函数后,被删除以后的内容会自动往前移。code
(3)使用sort排序,须要头文件#include<algorithm>
sort(vec.begin(),vec.end());//默认是按升序排列,即从小到大
能够经过重写排序比较函数按照降序比较,定义排序比较函数以下:
bool Comp(const int &a,const int &b) { return a>b; }
按以下方式调用便可实现降序排序:
sort(vec.begin(),vec.end(),Comp)
列表(list) 由节点组成的双向链表,每一个结点包含着一个元素。
list是由数据结构中的双向链表实现的,其内存空间能够是不连续的,只能经过指针来进行数据的访问。因为链表的特色,其能够以很好的效率支持任意地方的删除和插入。
双端队列(deque) 连续存储的指向不一样元素的指针所组成的数组。
deque是由一段一段定量的连续空间组成的,是动态数组类型。
栈(stack) 后进先出的值的排列。
队列(queue) 先进先出的值的排列。
优先队列(priority_queue) 元素的次序是由做用于所存储的值对上的某种谓词决定的的一种队列。
关联容器的内部结构是一个平衡二叉树(balanced binary tree)。平衡二叉树有以下几种:
集合(set) 由节点组成的红黑树,每一个节点都包含着一个元素,节点之间以某种做用于元素对的谓词排列,没有两个不一样的元素可以拥有相同的次序。
多重集合(multiset) 容许存在两个次序相等的元素的集合。
映射(map) 由{键,值}对组成的集合,以某种做用于键对上的谓词排列。map底层是红黑树RB-tree。
(1)按键排序
为了实现快速查找,map内部自己就是按序存储的(好比红黑树)。在咱们插入<key, value>键值对时,就会按照key的大小顺序进行存储。默认排序是按照从小到大。
//按键排序,默认排序是按照从小到大 std::map<int,std::string> mapScore; mapScore.insert(std::make_pair(99,"sun")); mapScore.insert(std::make_pair(79,"gao")); mapScore.insert(std::make_pair(86,"zhao")); mapScore.insert(std::make_pair(92,"yuan"));
(2)按值排序
//按值排序 struct CmpByValue { bool operator()(const std::pair<std::string,int> & lhs, const std::pair<std::string,int> & rhs) {return lhs.second > rhs.second;} }; std::map<std::string, int> mapScore; mapScore["LiMin"] = 90; mapScore["ZiLinMi"] = 79; mapScore["BoB"] = 92; mapScore.insert(std::make_pair("Bing",99)); mapScore.insert(std::make_pair("Albert",86)); //把map中元素转存到vector中 std::vector<std::pair<std::string, int>> vecMapScore(mapScore.begin(), mapScore.end()); sort(vecMapScore.begin(), vecMapScore.end(), CmpByValue());
参考连接:http://blog.csdn.net/iicy266/article/details/11906189?utm_source=tuicool&utm_medium=referral
多重映射(multimap) 容许键对有相等的次序的映射。
hashmap、hashset、hashtable,底层是哈希表。