[C++] 顺序容器

目录

1. 容器类型

2. 容器操作(除标注外,其余操作也同样适用于关联容器)

2.1 类型别名

2.2 容器定义和初始化

2.3 赋值与swap、assign替换

2.4 大小

2.5 添加/删除元素(array不支持)

2.6 关系运算符

2.7 获取迭代器的函数

2.8 array容器的特殊操作

3. 顺序容器操作

3.1 向顺序容器添加元素的操作

3.2 访问元素

3.3 删除元素

3.4 forward_list 的特殊操作

3.5 改变容器大小(array不支持)

3.6 管理容器容量大小

4 额外的string操作

4.1 构造string的其它方法

4.2 子字符串的操作

4.3 修改string的操作

4.4 string的搜索操作

4.5 string数值转换

5. 容器适配器

5.1 栈适配器

5.2 队列适配器


简介:容器就是一些特定类型对象的集合,顺序容器就是一种元素的顺序和它的值无关,只是将元素与元素加入容器时的位置相对应的容器类别。

1. 容器类型

容器 类型
vector 可变大小数组 快速随机访问,尾部插入、删除元素很快,顺序存储,计算地址速度很快 除尾部外其它位置插入、删除元素很慢
deque 双端队列 快速随机访问,头尾部插入、删除元素很快 除尾部外其它位置插入、删除元素很慢
list 双向链表 双向顺序访问,任意位置插入、删除元素很快 随机访问,内存开销大
forward_list 单链表 单向顺序访问,任意位置插入、删除元素很快 随机访问,内存开销大
array 固定大小数组 随机快速访问 不允许插入和删除元素,顺序存储,计算地址速度很快
string 字符串数组 快速随机访问,尾部插入、删除元素很快,顺序存储,计算地址速度很快 除尾部外其它位置插入、删除元素很慢

2. 容器操作(除标注外,其余操作也同样适用于关联容器)

2.1 类型别名

类型别名:vector<int>::reference 含义
iterator 迭代器
const_iterator 只能读取元素,不能修改元素的迭代器
size_type 无符号整型,保存容器的最大容量值
difference_type 带符号整型,两个迭代器之间的距离
value_type 容器的元素类型
reference 类似于:value_type&,容器元素类型的引用
const_reference 类似于:const value_type&元素的const左值类型

2.2 容器定义和初始化

容器定义和初始化 含义
C c; 默认构造函数

C c1( c2 );

C c1 = c2;

把c2拷贝为c1,c1和c2必须容器类型相同、元素类型也相同,如果C是array还要求大小相同
C c( b , e ); 用迭代器b和e之间的元素构造c的元素,b和e指向的元素类型必须与C的元素类型相容(不是相同,就是可以转换的意思)array不支持

C c{ a , b , c , ...};

C c = { a , b , c , ...};

列表初始化,a,b,c分别初始化容器c,列表内的元素类型必须与C的元素类型相容(不是相同,就是可以转换的意思)array不支持
C c( n ); c中包含有n个元素,这些元素进行了值初始化,是explicit的,只适用于顺序容器,且array不支持
C c( n , t ); c中包含有n个元素,每个元素用值 t 来进行初始化,只适用于顺序容器,且array不支持

注意:最后两种,传入大小参数的初始化,如果顺序容器的元素是不提供默认构造函数的类型,那么要显示的写上初始化值。

vector<string> ive(10,"hi");    //这里string是有默认构造函数的,举个例子

2.3 赋值与swap、assign替换

赋值与swap 含义
c1 = c2; 将c1替换为c2
c1 = { a , b , c  ,...... }; 将c1中的全部元素用列表里的全部元素替换
a.swap(b); 交换a与b的元素
swap( a , b ); 交换a与b的元素
a.assign( il ); 将a中的元素替换为初始化列表il中的元素,只适用于顺序容器,且array不支持
a.assign( n , t ); 将a中的元素替换为n个值为t的元素,只适用于顺序容器,且array不支持

注意:

        1.赋值相关运算会导致指向左边容器内部的迭代器、引用、指针全部失效,而swap不会。(array和string除外,string调用swap也会失效)

        2.swap效率很高,是因为实际上元素本身并没有交换,swap只是交换了两个容器的内部数据结构,但array除外,array会进行元素的交换,所以对array的swap操作时间和array的元素数量有关。

        3.swap的交换,虽然不会导致迭代器、引用、指针失效,且它们指向的元素不变,但会使他们指向的容器变化如:iter在swap之前指向svec1[3],在swap之后则会指向svec2[3]。

2.4 大小

大小 含义
c.size(); c中元素的数目,forward_list容器不支持此操作
c.max_size(); c可以保存的最大元素数目
c.empty(); c中有元素,返回false,c中没元素,返回true
c.length(); string独有,和size()的是一样的

2.5 添加/删除元素(array不支持)

    注:不同的容器,操作的接口不一样。 

添加/删除元素(ar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值