首页 > 编程语言 >C++ Primer 学习笔记——第九章

C++ Primer 学习笔记——第九章

时间:2023-08-01 15:55:50浏览次数:47  
标签:容器 顺序 删除 第九章 元素 C++ 链表 访问 Primer

第9章 顺序容器

前言

本章是对第三章——字符串、向量和数组的扩展延伸,在第三章我们对标准库的顺序容器有一定了解,那么学习完本章我们对顺序容器的知识将会更加完整。

标准库定义了几种关联容器,关联容器中元素的位置由元素相关联的关键字值决定。我们将在本章对关联容器做一定了解,在第十一章将会介绍关联容器特有的操作。

在第三章我们就发现,顺序容器在操作上似乎有共通性,原因是在容器类共享公共的接口,不同容器按照不同方式对其进行扩展。当然每种容器都提供不同的性能和功能的权衡。

容器可以看作一些特定类型对象的集合。顺序容器(sequential container)则是为用户(一般是程序员)提供控制元素存储和访问顺序的能力,根据元素加入容器的位置相对应。与之相对的则是关联容器,其依赖于元素的值,根据关键字的值来存储元素。

此外,标准库还提供三种容器适配器,分别为容器操作定义不同的接口,来借此与容器类型进行适配。


9.1 顺序容器概述

在前言简述了顺序容器的概念,标准库中存在以下顺序容器:

顺序容器类型 解释
vector 可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢
array 固定大小数组。支持快速随机访问。不能添加或删除元素
string 与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快
deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快
list 双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作速度都很快
forward_list 单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快

从上述的解释中,我们不难发现顺序容器有着不同的性能折中。

例如:

插入/删除元素较慢(以向容器添加或删除元素为代价)

无法进行快速随机访问(以非顺序访问容器元素为代价)

补充

forward_list和array是C++11中新增加的类型。

forward_list在设计之初,其目的就是为了获得与最好的手写单向链表数据结构一致的性能,所以该类型并没有size操作,毕竟保存或计算其大小也会比手写链表多出额外开销:)。

array类型与内置类型概念上一致,但是array更为安全、容易使用。当然,array对象大小是固定的,所以不支持添加和删除元素以及改变容器大小的操作。

虽然我们不愿承认大多数开发者设计的数据结构比标准库中容器运行速度慢,但事实便是如此:)。在C++下的标准库中容器的性能几乎与精心设计优化的同类数据结构一样好(通常更好

标签:容器,顺序,删除,第九章,元素,C++,链表,访问,Primer
From: https://www.cnblogs.com/aaroncoding/p/17596720.html

相关文章

  • 【C++】PACS基础知识学习
    1、PACSPACS是PictureArchivingandCommunicationSystems首字母缩写,全称为影像储存和传输系统,涉及放射医学、计算机技术、通讯技术及数字图像技术等,是医院信息系统的重要组成部分,是将数字医疗设备(如X线、CT、MRI、超声、病理等)所产生的医疗图像进行获取、储存、管理、诊断及......
  • C++函数传递函数指针、仿函数、绑定器、可调用对象
    只定义voidtestFunc(intnum,conststd::function<int(int)>&functor)就可以,其他的相当于这个函数的特化版本#include<iostream>#include<functional>usingnamespacestd;intfunc1(intnum){cout<<"func1:"<<num<<en......
  • 《dll篇》c#调用c++dll
    c#调用c++dll参考链接:https://jingyan.baidu.com/article/5d6edee2da72d699eadeecfe.html生成dll环境:VS2008新建项目->VisualC++->Win32项目MyDLL注意:C++编写的dll一般是不能直接拿来C#调用,需要先新建个C++的工程把dll里的方法重新封装成可被C#外部调用的函数。MyDLL.cp......
  • c++多线程同步
    死锁问题1单核实时可抢占的系统中,优先级不同的三个线程A/B/C,A>B>C当C先获得时间片开始执行,并获得锁A因为高优先级,被唤醒并中断C,但没有得到锁,而阻塞B获得执行机会,由于优先级高于C,B会一直执行,让AC系统无法取得任何进展std::stack<T>stack;std::mutexmutex;voidpush(c......
  • RichEdit RTF格式文本的存储和读取 VC++
    Rtf格式文本的读写,向控件发送EM_STREAMIN和EM_STREAMOUT消息,控件把格式文本显示或从把显示内容转化为格式文本。接口是用户定义的回调函数,格式文本由参数DWORD_PTRdwCookie传递。从控件读出RTF文本,参数用string比较好,因为消息处理是根据文本的长度,多次调用回调函数,传出数......
  • C++ Primer 第五版
    当我们使用istream对象作为条件时,其效果是检测流的状态.char:[-128,127].C++17新增byte数据类型,在<cstddef>头文件中定义,取值范围:[0,255].int和long都占用4字节空间.切勿混用带符号类型和无符号类型.\后跟3位以内8进制数字,或\x后跟一个或多个16进制数字都可以代表字符......
  • 【暑假例题】20230727 矩阵基本运算(C++)
    题目请使用C++实现矩阵的各种运算矩阵创建矩阵相加矩阵相减矩阵相乘数字乘矩阵矩阵上叠加矩阵左右叠加矩阵转置矩阵旋转矩阵求逆矩阵输出题目分析矩阵创建这里只需注意由于我们需要通过不同的函数对数组进行操作,所以我们需要将数组存储在容器或者使用指针防止数......
  • C++中不支持strdup(),使用_strdup()
    1.问题C4996 'strdup':ThePOSIXnameforthisitemisdeprecated.Instead,usetheISOCandC++conformantname:_strdup.Seeonlinehelpfordetails. Project1 G:\VS\Project1\Project1\MyString.cpp 802.原因错误C4996是一个编译器警告,它指示在代码中使用了一个......
  • c++11 call_once & once_flag
    #include<iostream>#include<mutex>usingnamespacestd;voidonce_fun(std::once_flag&&flag){std::call_once(flag,[](){cout<<"messagefromoncefun"<<endl;});}voidonce_fun1(s......
  • c++并发
    《c++并发编程第二版》,一方面翻译的挺拗口,一方面内容有点难度,看的很吃力,尤其到后面内存模型,无锁编程部分,看不下去了,仅记录部分内容。并发:采用任务切换的方式,一个任务运行一会在切换回另一个任务,在一个时间段内好像两个任务在同时进行并行:在多个CPU或多核CPU中同一时间多个任务同......