C++のarray

  • 2019 年 12 月 27 日
  • 筆記

题图:NoCopy

字数:1187 | 1分钟读完我2小时的思考

C++の容器array

天的C++の容器vector我们聊了C++中的vector,也是我们目前为止遇到的第二个容器,之前还遇到过string,只是我们没有说明它的容器属性,后面讲到容器时,一并补充。今天我们继续聊另外一个序列化容器 —— array。

其实,array跟我们上篇提到的vector很类似,但是在定义的方式上有一些不同。

注意,此处的array并不是数组,C++中也有数组,而且跟C中的数组基本没什么区别,所以这系列的文章就忽略掉了。

那么,我们先来看一下怎么样使用array。

使用array,首先需要在代码中包含头文件:

#include <array>  

由于array是标准库里面的类,所以需要指明命名空间:

using std:array;  

或直接在array前指明命名空间:

std::array..  

下面我们在看一下怎么定义array对象。直接上示例代码吧,

#include<array>  using std::array;  int main(){  	std::array<int, 3> a1{ {1, 2, 3} };    	std::array<int, 3> a2 = {1, 2, 3};  	std::array<std::string, 2> a3 = { std::string("a"), "b" };  }  

从上面的例子中,我们可以明显看见array与vector定义的不同。array定义时需要指定容器的大小,且与容器中实际的元素个数匹配。其他基本与vector相同。与vector一样,array也有元素访问的一些操作,而且基本与vector一致,直接放上示例代码吧:

//array Demo    #include <iostream>  #include <array>  using std::array;  int main()  {  	array<int, 4> arr1 = { 1, 2, 3, 4 };  	std::cout << arr1.at(2) << std::endl;  	std::cout << arr1[2] << std::endl;  	std::cout << arr1.front() << std::endl;  	std::cout << arr1.back() << std::endl;  	std::cout << arr1.data() << std::endl;  	std::cout << *arr1.data() << std::endl;    	return 0;  }  

看上面的代码,是不是跟我们上一篇文章写的vector一样?

下面我们再看一下array的迭代器,还是先上代码吧,很多时候,代码显得更加亲切:

    ...  array<int, 4> arr1 = { 1, 2, 3, 4 };  for (auto i = arr1.begin(); i != arr1.end(); ++i)      std::cout << *i << std::endl;    for (auto i = arr1.cbegin(); i != arr1.cend(); ++i)      std::cout << *i << std::endl;    for (auto i = arr1.rbegin(); i != arr1.rend(); ++i)      std::cout << *i << std::endl;  ...  

上面我们可以看出前两对迭代器跟vector的一样,不再细说。这里补充一下说rbegin,rend。其实,vector中也是有这两对获取迭代器的方法的,昨天文章遗漏了,正好今天补充一下。

rbegin与rend中的r其含义是reverse(反向的),这两个方法其实就是返回反向的迭代器,所有rbegin其实就是获取array的末尾迭代器,rend就是获取array的其实迭代器,实现了逆向遍历,这样看来是不是操作array或者vector更加方便了呢?

除此以外,array也有容量相关的一些操作函数,还是先上代码吧:

std::cout << arr1.empty() << std::endl;  std::cout << arr1.size() << std::endl;  std::cout << arr1.max_size() << std::endl;  

好像没啥可说的,好了,今天就到这里,别问,问就是没啥可说的,简单的技术,我就不想说太多,走走形式,显得更完整