容器:
一些特定类型对象的集合。
我个人理解是:一群我们定义好的数据类型存放在一个特定的区域,而这个区域呢就是容器。
顺序:
有序的,且不依赖于元素的值,而是在我们存放数据时的位置相对应。
个人理解:我们最开始存放一个数据,然后接下来的数据都是依次存放在上一个数据后面位置。
标准库中的顺序容器(C++primer 第九章表)
Type | Function |
---|---|
vector | 可变大小数组(动态数组)。支持快速访问。在尾部之外的位置插入数据可能很慢 |
list | 双向链表。只支持双向顺序访问。在list中任何位置进行插入\删除操作都很快。 |
deque | 双向队列。支持快速随机访问。在头尾位置插入\删除速度很快。 |
forward_list | 单向链表。只支持单项顺序访问。在链表中任何位置进行插入\删除操作都很快。 |
array | 固定数组大小。支持快速访问。不能添加和删除元素。 |
string | 与vector相似,专门存储字符的容器。 |
Example:
/* * 顺序容器的初始化,与输出。 * 2018年 05月 23日 星期三 18:08:32 CST */ //-------调用各种容器的头文件----------------- //----------------------------------------- using namespace std; int main() { //定义以及初始化容器 vector<int> age{1,2,3,4,5}; //age是一个动态数组,其类型是vector,容器里面存储数据类型是整型。 list<const char *> sex{"male","female"}; //sex是一个双向链表类型,其中存储的数据类型为字符指针常量 deque<string> name{"bob","alice"}; //name 是一个双向队列类型,其中存储的类型是字符串类型 vector<int> num(age); //num与age相同,只是其初始化不同于age,而是copy操作,把age的元素copy到num中。 list<string> can(name.begin(),name.end()); /*因为copy容器的话,需要容器类型和容器中元素类型相同,array需要大小也作为比较参数。 *满足前面这些要求,就可copy。如果有一个不匹配,便不能copy。 *但一种情况下,就是容器类型可以不同,容器中元素也可以不同,但被拷贝容器中元素可以转换成拷贝容器中元素类型 *便可以用一个容器的范围参数传递给另一个容器的构造函数。 *例如上面两个容器类型相同,但存储数据类型不同,但可以通过范围参数进行copy。 */ const int size=9; //array 固定大小的数组。与内置数组不同的是它可以copy而且更安全。 array<string ,size> boss{"马化腾","马云","雷军","李彦宏"}; array<int ,size> ascii{1,2,3,1}; //定义array容器的时候类似于前面几个容器,但是需要指定容器大小,而且没有被用户初始化的元素,会被系统初始化 //--------------------------------------- /* *用常规for语句通过迭代器进行解操作输出 *begin()指向容器开始 *end()指向容器元素末尾的下一个位置 *rbegin()返回反向迭代器,指向容器结束的位置 *rend()指向容器开始的上一个位置 */ for(auto neg=age.begin();neg!=age.end();neg++) { cout<<*neg<<"\t"; } cout<<endl; for(auto neg=age.rbegin();neg!=age.rend();neg++) { cout<<*neg<<"\t"; } cout<<endl; /* *用范围for语句遍历上述容器中的元素 */ for(auto i: sex) { cout<<i<<"\t"; } cout<<endl; for(auto i:boss) cout<<i<<"\t"; cout<<boss.size()<<endl; for(auto i:ascii) cout<<i<<"\t"; cout<<endl; return 0; }
Run:
xiandonghua@No:~/c++/c++bin/ch1$ ./SequenceContainer 1 2 3 4 5 5 4 3 2 1 male female 马化腾 马云 雷军 李彦宏 9 1 2 3 1 0 0 0 0 0
一步一步慢慢学,不怕学的比别人慢,就怕什么也没学懂。
----致自己