[C++ Primer] 顺序容器

顺序容器

顺序容器概述

  1. 下标列出了标准库中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。这些容器在以下方面都有不同的性能折中:
    • 向容器添加或从容器中删除元素的代价
    • 非顺序访问容器中元素的代价
2. 若不确定应该使用哪种容器,可以在程序中只使用vector和list公共的操作:**使用迭代器**,不适用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。

容器库概览

  1. 容器操作

  2. 迭代器范围
    左闭合区间 [begin,end)

  3. 容器定义和初始化

    每个容器都定义了一个默认构造函数,除array之外,其他容器的默认构造函数都会创建一个指定类型的空容器,且都可以接受指定容器大小和元素初始值的参数。

  4. 虽然不能对内置数组类型进行拷贝或对象赋值操作,但array并无此限制:

    int digs[10] = {0,1,2,3,4,5,6,7,8,9};
    int cpy[10] = digs;		// 错误: 内置数组不支持拷贝或赋值
    array<int,10> digits = {0,1,2,3,4,5,6,7,8,9};
    array<int,10> copy = digits;		// 正确:只要数组类型匹配即合法
    

    与其他容器一样,array也要求初始值的类型必须与创建的容器类型相同。此外,array还要求元素类型和大小也都一样,因为大小也是array类型的一部分,

  5. 赋值运算

顺序容器操作

  1. 向顺序容器添加元素

  2. emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数相匹配。

  3. 访问元素操作

  4. 访问成员函数(front、back、下标和at)返回的是引用

    if(!c.empty()){
        c,front = 42;			// 将42赋值c首元素
        auto &v = c.back();		// 获得指向最后一个元素的引用
        v = 1024;				// 该变c中元素
        auto v2 = c.back();		// v2不是引用,是c.back()的拷贝
        v2 = 0;					// 未改变c中元素
    }
    
  5. 删除元素操作

  6. forward_list中插入或删除操作

  7. 改变容器大小的操作

vector对象是如何增长的

  1. 管理容量的成员函数

​ 调用reserve之后,capacity将会大于或等于传递给reserve的参数。

额外的string操作

  1. 构造string的其他方法

  2. 子字符串操作

  3. 修改string的操作

  4. string搜索操作

    string搜索操作
  5. 比较操作

    比较操作
  6. string与数值之间的转换

    string与数值之间的转换

容器适配器(adaptor)

  1. 标准库还定义了三个顺序容器适配器:stackqueuepriority_queue。容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样。一个容器适配器接受一个顺序容器,使其行为看起来像一种不同的类型。例如,stack适配器接受一个顺序容器(除array和forward_list外),并使其操作看起来像一个stack一样。

    所有容器适配器都支持的操作
  2. 默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的。我们可以在创建一个适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型

    // 在vector上实现的空栈
    stack<string, vector<string>> str_stk;
    
  3. 栈适配器

    定义在stack头文件中

    栈操作
  4. 队列适配器

    定义在queue头文件中

    image-20240628002135146

​ 标准库queue使用一种先进先出(first-in, first-out, FIFO)的存储和访问策略。

posted @   Invinc-Z  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示