【语法回顾】C++STL:顺序容器

  一.顺序容器的定义                                                                     

       顺序容器,它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定的。

  标准库定义来三种顺序容器:vectorlistdeque(双端队列读音”deck”

  三种顺序容器的适配器:stackqueuepriority_queue

  相关头文件

  #include<vector> #include<list>

  #include<deque> #include<stack> #include<queue>

   容器的初始化(4种)   

  vector<int> ivec; //默认构造函数

  vector<int> c(c2); //创建容器 c2的副本

  vector<int> c(n, t); //n个值为t 的元素创建并初始化容器

  list<string> mylist(3, “haha”); // 3个”haha”字符串初始化list

  list<string> mylist1(mylist.begin(), mylist.end()); // 初始化为其他容器的一部分

   容器操作的特殊要求   

  容器的存储类类型的对象,只有当其元素类型提供默认构造函数时,才可以使用容器

  Car类没有默认构造函数,但是含有一个int形参的构造函数

vector<Car> cars; // 正确,没有调用默认构造函数

vector<Car> cars(10); //错误,该声明的含义是定义并初始化10个Car类的对象,调用了默认构造函数,但是Car没有提供

vector<Car> cars(10, 1); //正确,调用来int形参的构造函数

  

  二.容器的容器                                                                              

  vector< vector<string> > lines; //必须用空格间隔开两个>符号

   A.迭代器常用运算   

  *iter //返回迭代器iter所指向元素的引用

  iter->number // 当容器中的元素为结构体或类时,相当于对其解引用,并返回number成员值

  iter++; iter--; //迭代器的自增自减

  iter1 == iter2 //iter1iter2指向同一容器的同一元素时相等,或者同时指向.end();

  只有vectordeque中,迭代器支持的算数运算: iter+n -n, iter1 + iter2 – iter3; 关系运算:>,<,>=,<=

  注意:在使用迭代器时,必须留意哪些操作会使迭代器失效,比如增删等操作。例:当vector在执行来push_back的操作后,就不能再信任之前的iterator值了

   B.容器定义的类型别名(常用)   

  size_type // 无符号整型,足以存储最大长度可能的容器长度

  iterator // 此容器的迭代器类型

  reverse_iterator // 此容器按逆序寻址的迭代器

  const_iterator // 只读迭代器

  const_reverse_iterator // 只读逆序迭代器

  三.容器的常用操作                                                                      

   A.在顺序容器中添加人元素的操作(原迭代器可能失效)   

  c.push_back(t) // 在容器c的尾部添加

  c.push_front(t) // 在容器c 的前端添加

  c.insert(iter, t) //在迭代器iter所指位置前添加元素t

  c.insert(iter, iterA, iterB) // 在迭代器iter所指位置前添加有迭代器iterA,iterB所限制范围内的元素

  注意:容器元素的插入,复制结果都是原数据的副本,互不影响。

   B.容器大小的操作   

  c.size() // 返回元素个数,类型为 c::size_type

  c.empty()

  c.resize(n) // 调整容器的长度大小,使其能够枸容纳n个元素

  c.resize(n,t) // 新增的范围都以元素t来填充

   C.元素的访问   

  c.back() //返回容器c的最后一个元素的引用

  c.front() //返回容器的第一个元素的引用

  c[n] //下标操作,只有vector,deque (string) 可以使用

   D.删除元素   

  c.erase(p) // 删除迭代器p所指向的元素

  c.erase(b, e) //删除迭代器b,e之间的元素

  c.pop_back() //删除容器最后一个元素

  c.pop_front() //删除容器第一个元素

  c.clear() // 清空容器

  c1.swap(c2) // c1,c2存放内容交换

  c.assign(b, e) //重新设置c的元素,将迭代器b,e之间的元素复制到c中去,b,e必须不是指向c中元素的迭代器







原文地址:https://www.cnblogs.com/VortexPiggy/p/2587860.html