接着上次的STL,list和map同样是两种比较常用的容器。就像vector一样,很好很强大。
第三种容器deque也是连续内存存储元素,类似vector,但是它的前端和末端元素的插入和删除效率更高。STL的队列便是以deque实现的。定义:
list<string> slist;
或 list<int> ilist(1024) 1024个0值
或 list <string> slist(16,"fuck");16个"fuck"
或 int ia[3]={2,1,5};vector <int> fib(ia,ia+3);迭代赋值
或list <string> slist; list<string> slist2(slist);复制容器的元素
容器还有push_back(),pop_back()操作。list和deque还有push_front()和pop_front()操作。通用的容器插入函数insert(),删除函数为erase().
使用泛型算法前,#include <algorithm>
find()搜寻无序集合是否存在某值,属于线性搜寻。
binary_search()搜寻已序集合,效率比find()高。
count()返回元素数目。
search()搜寻一个子序列。
max_element()传入一对迭代器,返回一个区间内的最大数。
grow_vec()持续将元素加入vector,直到加入的元素值>=最大元素
copy()拷贝一份容器中的元素
sort()对容器进行排序
Function Objects是某种类实体对象,可当作一般函数调用,性能提高。
Function Objects Adapters对Function Objects进行修改操作,是Function Objects转化为一元的对象,再次提高性能。
MAP是一对数值,key通常是字符串,另一个是value。
#include <map>
map<string,int> words;
关联词和值:words["you"]=1;
任何一个key值在map内只能有一份,如果要多份相同的key值,需要使用multimap。可使用find()函数索引key值来找到需要的keyvalue。
set由一群keys组合而成,可用于判断某值是否在某个集合中,如图的遍历算法中。任何一个key值在set内只能有一份,如果要多份相同的key值,需要使用multiset。
#include <set>
set<string> word;
