我们已经认识STL库里的array容器了,在填充完元素后,最常见的操作就是查看array里的元素了。本节将会详细介绍多种访问array内元素的方式,让读者熟悉array容器内元素的访问方式!
和普通数组一样,array也重载了'[]'运算符,我们可以通过'[]'访问array内的元素:
#include<bits/stdc++.h> /* 如何访问array容器内元素 */ using namespace std; /*方法1:由于'[]'运算符重载实现下标访问*/ void test() { array<int,5> arr{1,2,3,4,5}; for(int i=0;i<5;++i) { cout << arr[i] << " "; } cout << '\n'; } int main(){ test(); return 0; }
array容器提供了at()这个成员函数进行元素访问,由于at函数内的参数是元素下标,范围是[0-array.size()-1],所以这里千万注意不要访问越界!
cout << arr.at(i) << " "; //通过at()成员函数进行元素访问 参数是元素下标
众所周知'[]'(因为它没有进行索引检查)访问速度非常快,既然可以通过'[]'访问元素了那么为什么会出现at这个成员函数呢?原因很简单,通过'[]'访问,如果数组越界,会造成程序崩溃,而你不知道是哪里问题,需要逐一排查。而我们的at()会提示你错误原因,比如此时我访问一个arr里面没有的元素:
cout << arr.at(100)<<'\n';
会出现这么一个报错:
terminate called after throwing an instance of 'std::out_of_range'
what(): array::at: __n (which is 100) >= _Nm (which is 5)
它的意思是只有5个元素,而你却向访问第100个元素,简直是痴心妄想。
c++提供了get<n>这个函数模板进行元素访问,参数是访问元素的下标,这里参数n只能是常量,用变量会报错,这里演示一下:
#include<bits/stdc++.h> /* 如何访问array容器内元素 */ using namespace std; /*c++中get()函数模板进行元素访问*/ void test() { array<int,5> arr{1,2,3,4,5}; for(int i=0;i<5;++i) { cout << get<0>(arr) << " "; } cout << '\n'; } int main(){ test(); return 0; }
既然学STL,那就记得迭代器吧,想起迭代器,你就要有“迭代器使用类似指针”这个印象,指针?没想到吧,array容器有一个成员函数data()维护指向首元素的指针,那我们分别通过迭代器和指针访问第5个元素:
#include<bits/stdc++.h> /* 如何访问array容器内元素 */ using namespace std; /*c++中get()函数模板进行元素访问*/ void test() { array<int,5> arr{1,2,3,4,5}; /*迭代器访问第5个元素*/ array<int,5>::iterator it = arr.begin() ; for(int i=0;i<4;++i)it++; cout << *it << '\n'; /*data()指针访问*/ int * p = arr.data() ; for(int i=0;i<4;++i)++p; cout <<*p<< '\n'; } int main(){ test(); return 0; }
总结:我们总共学习了5种方法进行对array的访问,尽管平常都是通过'[]'访问,其他方法我们也需要了解一下。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程