【C++】序列与关联容器(二)序列容器

【C++】序列与关联容器(二)序列容器

一、C++ 标准库中的序列容器模板

每种容器的实现方法的难易不同,特性不同,适用的应用场景不同

  • array :元素个数固定的序列容器(不支持对象的增添删除)
  • vector :元素连续存储的序列容器(每一个数据的地址完全连续,在一个连续的空间内存储)
  • forward_list / list :基于链表 / 双向链表的容器(每一个数据都不连续,通过内部指针连接在一起)
  • deque :vector 与list 的折衷(有多段,每一段之间通过指针联系在一起,段内是一段连续的内存空间)
  • basic_string :提供了对字符串专门的支持

上述容器都是模板,都需要使用元素类型来实例化容器模板,从而构造可以保存具体类型的容器。
不同的容器所提供的接口大致相同,但根据容器性质的差异,其内部实现与复杂度不同。
对于复杂度过高的操作,提供相对较难使用的接口或者不提供相应的接口

二、array 容器模板

具有固定长度的容器,其内部维护了一个内建数组,与内建数组相比提供了复制操作

 std::array<int,3> x={};
 std::array<int,3> y=x;//支持数组复制操作

由于array是固定长度容器,不支持后期删除或者增添元素,所以必须要在定义的时候就给出长度参数。

提供的接口:

  • 构造
    缺省初始化:可能会导致数组中的值是乱的。一般不建议这样做。
 std::array<int,3> x;

赋值初始化:

 std::array<int,3> x={3};
  • 元素访问:[],at,front,back,data
   std::array<int, 3> x = {1,2,3};
   std::cout << x[2] << std::endl; //3
   std::cout << x.at(2) << std::endl; //3
   std::cout << x.front() << std::endl; //打印首个元素 1
   std::cout << x.back() << std::endl; //打印最后一个元素 3
   std::cout << x.data()<< std::endl; //.data操作返回的是 T*,也就是该数组的首地址。这个和智能指针的get()用法是一个意思。由于智能指针以及array数组都不是普通的数据类型,而是一个模板类,所以其本身不是一个指针,需要用特定的命令获取纯的数据类型指针,就要用到这样的命令。

关于上面程序代码最后一行提到的data命令:array,vector这些都有,基本上如果是连续保存的数据类型就会有,而分散保存的,比如list就不会有。

  • 容量相关(平凡实现):empty,size
 std::array<int, 3> x = {1,2,3};
 std::cout << x.empty() << std::endl; //输出0,因为不是empty
 std::cout << x.size() << std::endl;  //3
 std::array<int, 0> y ;
 std::cout << y.empty() << std::endl; //输出1,因为是empty
 
  • 填充与交换:fill,swap
 std::array<int, 3> x ;
 x.fill(100); //把x中所有元素全部赋值为100
 std::array<int, 3> x={1,2,3} ;
 std::array<int, 3> y={4,5,6} ;
 x.swap(y); //把x与y中的元素交换,此时x={4,5,6},y={1,2,3}.
  • 比较操作:<=>
    比较数组内元素的每一个值的大小。
  • 迭代器
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜里有好多糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值