• 【语法回顾】C++STL:容器(一)


    【语法回顾】C++STL:容器(一) - ATP_ - 博客园

    【语法回顾】C++STL:容器(一)


    2012-07-12 12:05
    by
    ATP_,
    968
    阅读,
    0
    评论,
    收藏,
    编辑

      一.顺序容器的定义                                                                     

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

    标准库定义来三种顺序容器: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形参的构造函数

    1
    2
    3
    4
    5
    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中元素的迭代器

  • 相关阅读:
    biji001
    公司内部openStack环境信息
    def
    CI调试
    一:Java之面向对象基本概念
    STL_算法_Heap算法(堆排)(精)
    IOS开发-经常使用站点集合
    【iOS开发-47】怎样下载iOS 7.1 Simulator 以及iOS 8离线的Documentation这些文件?
    设计模式简介
    how to deal with &quot;no such file error or diretory&quot; error for a new programmer in QT creator
  • 原文地址:https://www.cnblogs.com/lexus/p/2592039.html
Copyright © 2020-2023  润新知