C++顺序容器


C++primer第九章P292学习笔记

1 顺序容器概述

什么是顺序容器?
容器(container)包括两种:顺序容器、关联式容器和无序容器(新增)。

下表列出了标准库(STL)中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力,但是顺序容器会在以下方面有不同的性能折中:

  • 删除或添加元素的代价
  • 非顺序(随机)访问元素的代价
容器名称支持的访问增删
vector可变大小数组快速随机访问在中间位置插入/删除元素很慢
string类似于保存字符的vector快速随机访问在中间位置插入/删除元素很慢
list双向链表双向顺序访问在链表的任何位置插入或删除元素都很快
forward_list单向链表单向顺序访问在链表的任何位置插入或删除元素都很快
deque双端队列快速随机访问在头尾插入或删除元素很快
array固定大小数组快速随机访问不能添加或删除元素
  1. vector与string
    string和vector都将元素保存在连续地内存空间中,因此随机访问速度很快,但是在中间位置增删元素时需要移动其他元素,导致速度很慢。
  2. list与forward_list
    设计的目的是为了令容器的任何位置的增删操作都很快速,但是这两个容器不支持随机访问。
  3. deque
    是一个更为复杂的数据结构。与string和vector类似,它支持快速的随机访问,在中间位置的增删也可能很慢,但是,deque在两端增删元素都是很快的,与list速度相当。

2 容器库概览

对于容器类的操作:

  • 某些操作时所有容器类型都提供的,如下所示;
  • 有些操作只针对顺序容器,有些只针对关联性容器、有些只针对无序容器;
  • 还有一些操作只适用于小部分容器
/**
所有容器都支持的操作
**/
			
//类型别名
iterator						此容器类型的迭代器类型
const_iterator					可以读取元素,但不能修改元素的迭代器类型
size_type						无符号整型,足够保存此容器类型的最大可能大小
difference_type					有符号整型,足够保存两个迭代器之间的距离
value_type						元素类型
reference						元素的左值类型,与value_type&含义相同
const_reference     			等价于const value_type&

//构造函数
C c;							默认构造函数,构造空容器
C c1(c2);						构造c2的拷贝c1
C c(b, e);						构造c,将迭代器b和e指定范围内的元素拷贝到c(array不支持)
C c(a,b,c...);					初始化c

//赋值与交换
c1 = c2							将c1中的元素替换为c2中的元素
c1 = {a,b,c...}					将c1的元素替换为列表中的元素,不适用于array
a.swap(b);						交换a与b的内容
swap(a,b)						与a.swap(b)等价

//大小
c.size()						c中元素数目(不支持forward_list)
c.max_size()					c中保存的最大元素数目
c.empty()						判断是否为空

//增加删除元素(不适用于array)
//注:在不同容器中,这些操作的函数都不同
c.insert(args)					将args中的内容插入c中
c.emplace(inits)				使用inits构造c中的一个元素
c.erase(args)					删除args中指定元素
c.clear()						清空所有元素


//关系运算符
==, !=							所有容器都支持
<, <=, >, >=					无序容器不支持

//获取迭代器
c.begin(), c.end()				分别返回指向c的收元素和尾元素之后位置的迭代器
c.cbegin(), c.cend()			返回const_iterator

//反向容器的迭代器(不支持forward_list)
reverse_iterator				按逆序寻址的迭代器
const_reverse_iterator			不能修改元素的reverse_iterator
c.rbegin(), c.rend()			分别返回指向c的收元素和尾元素之后位置的反向迭代器
c.crbegin(), c.crend()	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值