一、 Vector与List:
#include<vector>
#include<list>
1. 他们相当于线性存储的两种形式,Vector 是动态数组,List 是链表。
2. 主要区别是他们的存储方式上,Vector 是一片连续存储空间,而List不一定是,所以对于Vector支持直接寻址访问,List 却只能用迭代器进行访问。
3. 扩容方式,对于Vector 存在一个扩容问题,假如原先存储的空间不够了,Vector 就需要扩容,但是它的扩容并不是需要一个扩充一个,它会多扩充一部分空间预留使用。主要是这样的,对于数据类型size小的它会多分配n个sizeof(数据类型)的空间,但是大的类它只会需要一个就分配一个。这样的话一般类型size小的用Vector存,扩容也快;但是类型size很大时,建议用List存储。
总而言之,Vector便于直接寻址、小数据的扩容。而List更加擅长处理大数据类型。
二、ctype
#include <locale>
ctype类是定义了一些好用的方法: isalpha()、 isdigit() 、ispunct()、 isspace()、 toupper()、 tolower()等函数
三、map
#include<map>
这是一个key/data的数据容器类型,用法map<string, int> word_count; 这样的话是string类型的key,存的是int类型的data。需要插入key->data。具体用法再去google吧,这里不做具体介绍,只是要知道map是干什么用的就行了。
四、set
#include <set>
这个是c++集合类,元素间字符是互异的。insert插入、利用count(被搜索数据)确定集合中元素个数、find(被搜索数据)返回数据iterator指针。set<声明的类型>::iterator itr = set.begin(); itr++ 来遍历。
五、multimap, multiset。
#include<multimap>
#include<multiset>
这是map和set允许key或元素重复的版本,用法与map和set基本相同
六、stack
#include <stack>
栈,后入先出。注意pop()是void类型的,如果想查看顶上的元素那么就top()查看完了,在pop()弹出。stack使用deque实现的,因为他支持前端插入删除,但是vector并不支持。
empty() 如果栈为空则返回true 否则返回false
size() 返回栈中元素的个数
pop() 删除但不返回栈顶元素
top() 返回但不删除栈顶元素
push(item) 放入新的栈顶元素
七、queue
#include<queue>
优先队列,先入先出。这里有FIFO队列和优先队列之分(就是按照优先级区分,优先级高的现出来,叫priority_queue)。缺省情况下,元素的优先级由底层元素类型相关的小于操作符执行(其实就是和FIFO队列一致)。
empty() 如果队列为空则返回true 否则返回false
size() 返回队列中元素的个数
pop() 删除但不返回队首元素,在priority_queue弹出的是优先级最高的。
front() 返回但不删除队首元素它只能应用在一般队列上
back() 返回但不删除队尾元素它只能应用在一般队列上
top() 返回 , 但不删除priority_queue 的优先级最高的元素,只能应用在priority_queue 上
push(item) 在队尾放入一个新元素。对于priority_queue是按优先级排序。