• 【语法回顾】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中元素的迭代器







  • 相关阅读:
    搜索rapidshare资源的几种方法
    Sharepoint 浅谈 [转]
    如何使用本地账户“完整”安装 SharePoint Server 2010
    为SharePoint 2010配置基于表单的身份认证
    网页禁用右键、防拷贝及"另存为"失效方法
    Sharepoint 2010 表单 身份认证(基于SQL数据库)
    SharePoint2007文档的点击率统计
    Sharepoint2010 表单认证常见问题
    sharepoint不能上载多个文件
    关于android service 重启
  • 原文地址:https://www.cnblogs.com/VortexPiggy/p/2587860.html
Copyright © 2020-2023  润新知