在《初识STL库中的list容器》那节我们就可以看到list容器内所有成员函数,如果我们仔细观察,我们就会发现list既没有at()成员函数又没有data()指针,所以我们不能通过at()或data()来对list进行元素访问。当然,由于链表的元素储存地址不是连续的,所以无法通过'[]'重载进行元素访问,所以list只能“认命”,只能通过最基本的元素访问方式——迭代器进行元素访问。值得一提的是,list迭代器是双向迭代器,不支持随机访问,只能进行++或--的操作,而不能通过+5、-7之类操作迭代器。下面我就演示如何通过迭代器遍历list容器内所有元素:
#include <bits/stdc++.h> #include<list> /*只能通过迭代器访问list容器 */ using namespace std; void test() { list<int> l{1,2,3,4,5}; for(auto it = l.begin();it!=l.end();++it) cout <<*it << " "; cout << '\n'; } int main() { test(); return 0; }
list容器有专门维护首尾元素的函数:front()、back(),如果需要频繁访问首尾元素,我们可以通过成员函数直接访问:
cout<< l.front()<<'\n';//访问第一个元素 cout<< l.back()<<'\n';//访问最后一个元素
总结:本节主要讲了list容器的两种访问方式,如果想要访问其他元素,就需要通过迭代器++和--来获取;如果想要频繁访问首尾元素,通过front()、back()访问再好不过。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程