以前也使用过一些STL方面的东西,但是最近用得更加频繁了,所以总算抽出一点时间来小结一下。
vector 是一段连续的内存区域,它的作用和数组一样,只不过是可以自己增长长度(非常好用)。
list的游标一次只可以移动一步,因为它就是一个双向链表。
deque也是一段连续的内存区域,它通过两级数组结构来实现,一级表示实际的容器,另一级指向容器
的首和尾,因此可以高效的在首部插入和删除元素。
选择顺序容器的一些准则:
1.如果我们需要随机访问一些容器,则vector要比list好
2.如果我们已经知道存储元素的个数,则vector要比list好。
3.如果需要在中间部分插入和删除元素,则list要比vector好。
对于容器中元素的访问可以有三种方法:
1.使用游标 例如:vector<char>::iterator iter;
for(iter=container.begin();iter!=container.end();iter++)
{do_something_with_element(*iter);}
2.如果清楚地知道容器分配了多少内存空间,可以直接用[]:container[index]访问,index=0,1...
3.如果清楚地知道容器分配了多少内存空间,可以用at()方法:container.at(index),index=0,1...
set(集合):其中的元素会自动按照大小顺序排列,并且会删除重复的元素。
map(映射):经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个
map中的键值必须是唯一的)是在排序和搜索时使用,他的值可以在容器中重新读取,而另一个值是该元素
的关联的数值。
为了避免在debug时出现警告,可以使用下面的编译器命令:
#pragma warning(disable:4786)
注意:每当一个新值添加到容器中或者有一个值从容器中删除,游标的值就会失效(与句柄类似)。这一点与指针是不一样的。
要充分利用标准库中的一些算法。