STL容器(一): array

前言

一直觉得STL是C++最有利的武器之一,今天开个坑来学习一下。先从最好欺负 容易学的Array开始,fighting!

array简介

array内部其实是封装了一个简单的静态数组。并且在创建时就要确定数组的大小,在对象生命期结束前数组的长度都维持在这个大小
在这里插入图片描述
如果需要使用这个容器,要在头文件中包含 #include < array > ,它也是在std命名空间里的。

using namespace std{
	template <typename T, size_t N>
	class array;
}

上面第一个参数就是数组元素的类型,第二个就是元素的个数。

功能

我们可以把它当成一个普通的数组看待,但是它拥有随机访问迭代器(random-access iterators),可以使用STL的算法。如果我们需要一个固定长度的数组,array拥有最好的性能,因为它分配在栈上(if possible),不会重新分配内存,并且可以随机访问。

初始化

array的构造函数由于模板第二个参数 size 决定了它是不会构造空容器的,总是会在构造时生成这么多的空间,并且要是没有元素参数传进来,初始化的数字不一定是0,接下来会有例子介绍。

1、无元素传入–值未定义

 array<int,5> arr1;
   for(auto i:arr1){
   		cout<<i<<endl;
   }

结果瞬息万变,什么都有可能。

2 、0初始化

   array<int,5> arr1 = {};
   for(auto i:arr1){
   		cout<<i<<endl;
   }

实际上是调用了 int() 。

3、用序列来初始化

 array<int,5> arr1 = {3,1,2,3,4};
   for(auto i:arr1){
   		cout<<i<<endl;
   }

注意,若此时序列元素不够多,则后面的被初始化为 0。
但是若序列的元素数量超过array大小,则会报错。
还有一个情况,如下:
array没有如vector这样的构造器。

std::array<int,5> a({ 1, 2, 3, 4, 5, 6 }); // ERROR
std::vector<int> v({ 1, 2, 3, 4, 5, 6 }); // OK

总结如图
在这里插入图片描述

非修改操作

接下来是一些比较有用的操作,它们不会对数组本身造成修改。
在这里插入图片描述

  //相等的
  array<int,5> arr1 = {1,2,3};
  array<int,5> arr = {1,2,3};
  
  //不相等的且 arr1 > arr
  array<int,5> arr1 = {3,2,1};
  array<int,5> arr = {1,2,3};

swap

下面两种交换元素都是可以的。

c1.swap(c2);
swap(c1,c2);

迭代器

STL容器怎么能没迭代器呢,下面就是常见迭代器操作。
在这里插入图片描述

array<int,5> arr1 = {3,2,1};
   array<int,5> arr = {1,2,3};
   auto begin = arr1.begin();
   cout<<*begin<<endl;//3

参考书籍
《C++标准库-自学教程与参考手册》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值