出处:http://blog.csdn.net/niushuai666/article/details/6654951算法
list
1.list的成员函数push_back()把一个对象放到一个list的后面,而 push_front()把对象放到前面
2.list容器不支持在iterator加一个数来指向隔一个的对象。 就是说,咱们不能用Milkshakes.begin()+2来指向list中的第三个对象,由于STL的list是以双链的list来实现的, 它不支持随机存取。vector和deque(向量和双端队列)和一些其余的STL的容器能够支持随机存取
3.使用STL list和 iterator,咱们要初始化、比较和给iterator增量来遍历这个容器。STL通用的for_each 算法可以减轻咱们的工做.for_each算法引用了iterator范围的概念,这是一个由起始iterator和一个末尾iterator指出的范围。 起始iterator指出操做由哪里开始,末尾iterator指明到哪结束,可是它不包括在这个范围内。
4.使用iterator范围时,这个范围指出一个list或任意 其余容器中的一部分来处理。一般首iterator指着开始的位置,次iterator指着中止处理的地方。 由次iterator指出的元素不被处理。
5.在STL中有时容器支持它本身对一个特殊算法的实现,这一般是为了提升性能。list容器有它本身的sort算法,这是由于通用算法仅能为那些提供随机存取里面元素 的容器排序,而因为list是做为一个链接的链表实现的,它不支持对它里面的元素随机存取。因此就须要一个特殊的 sort()成员函数来排序list。
因为各类缘由,容器在性能须要较高或有特殊效果需求的场合支持外部函数(extra functions), 这经过利用构造函数的结构特性能够做到。
6.必须确保在两个尖括号之间或尖括号和名字之间用空格隔开,由于是为了不同“>>”移位运算符混淆。好比
vector <list<int>> veclis;
这样写会报错,而这样写:
vector <list <int> > veclis;
就能够避免错误
7.vector(向量)——STL中标准而安全的数组。只能在vector 的“前面”增长数据。
deque(双端队列double-ended queue)——在功能上和vector类似,可是能够在先后两端向其中添加数据。
list(列表)——游标一次只能够移动一步。若是你对链表已经很熟悉,那么STL中的list则是一个双向链表(每一个节点有指向前驱和指向后继的两个指针)。
set(集合)——包含了通过排序了的数据,这些数据的值(value)必须是惟一的。
map(映射)——通过排序了的二元组的集合,map中的每一个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是惟一的)是在排序或搜索时使用,它的值能够在容器中从新获取;而另外一个值是该元素关联的数值。好比,除了能够ar[43] = "overripe"这样找到一个数据,map还能够经过ar["banana"] = "overripe"这样的方法找到一个数据。若是你想得到其中的元素信息,经过输入元素的全名就能够轻松实现。
multiset(多重集)——和集合(set)类似,然而其中的值不要求必须是惟一的(便可以有重复)。
multimap(多重映射)——和映射(map)类似,然而其中的键值不要求必须是惟一的(便可以有重复)。
8.游标是指针,但不只仅是指针。游标和指针很像,功能很像指针,可是实际上,游标是经过重载一元的”*”和”->”来从容器中间接地返回一个值。
9.iterator——对于除了vector之外的其余任何容器,你能够经过这种游标在一次操做中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用“++”操做符。而不能使用“--”或“+=”操做符。而对于vector这一种容器,你可使用“+=”、“—”、“++”、“-=”中的任何一种操做符和“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。
10.除了类型和值外,模板含有其余的参数。你能够传递一个回调函数(一般所说的声明“predicate”——这是带有一个参数的函数返回一个布尔值)。例如,若是你想自动创建一个集合,集合中的元素按升序排列,你能够用简明的方法创建一个set类:
set <int, greater<int> > set1
greater 是另外一个模板函数(范型函数),当值放置在容器中后,它用来为这些值排序。若是你想按降序排列这些值,你能够这样写:数组
set <int, less<int> > set1安全
11.vector中reserve只是预先划分一块内存给vector使用,主要是为了提升效率:避免在不断push_back的过程当中,因为容量变更致使的从新分配!less
若是没有的话,push_back的以后,当内存不够了,就会有内存的从新分配和元素的拷贝。这是绝对很低效的。函数
若是 vector 的容量不够了,它会
1. 从新分配更多的空间(通常是增长 N/2,N为原容量)
2. 将现有vector中的数据逐个拷贝到新空间
3. 释放旧空间中的全部元素
4. vector 指向新空间性能