C++顺序容器初始化

顺序容器

容器:

一些特定类型对象的集合。

我个人理解是:一群我们定义好的数据类型存放在一个特定的区域,而这个区域呢就是容器。

顺序:

有序的,且不依赖于元素的值,而是在我们存放数据时的位置相对应。

个人理解:我们最开始存放一个数据,然后接下来的数据都是依次存放在上一个数据后面位置。

标准库中的顺序容器(C++primer 第九章表)

Type Function
vector 可变大小数组(动态数组)。支持快速访问。在尾部之外的位置插入数据可能很慢
list 双向链表。只支持双向顺序访问。在list中任何位置进行插入\删除操作都很快。
deque 双向队列。支持快速随机访问。在头尾位置插入\删除速度很快。
forward_list 单向链表。只支持单项顺序访问。在链表中任何位置进行插入\删除操作都很快。
array 固定数组大小。支持快速访问。不能添加和删除元素。
string 与vector相似,专门存储字符的容器。

Example:

/*
*  顺序容器的初始化,与输出。
*  2018年 05月 23日 星期三 18:08:32 CST
*/


//-------调用各种容器的头文件-----------------
#include<iostream>
#include<deque>
#include<list>
#include<string>
#include<array>
#include<forward_list>
#include<vector>
//-----------------------------------------


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   


一步一步慢慢学,不怕学的比别人慢,就怕什么也没学懂。

----致自己


猜你喜欢

转载自blog.csdn.net/arctic_fox_cn/article/details/80424305
今日推荐