单个数据访问
因为在list中空间不是连续的,同时,list的迭代器也不支持随机访问,所以对于list来说[ ]和at是不适用于list的,可以利用迭代器++或者–来访问其他元素
front();//返回第一个元素 back();//返回最后一个元素
使用:
#include<iostream> #include<list> using namespace std; void print(list<int>& l) { for (list<int>::iterator b=l.begin(); b != l.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { list<int> l; for (int i = 0; i < 10; i++) { l.push_back(i); } print(l); cout << l.front() << endl; cout << l.back() << endl; } int main() { test1(); return 0; }
反转操作
在list中可以反转链表,就是让链表中所有元素交换位置,后面的与前面的交换。
reverse();//反转链表
使用:
#include<iostream> #include<list> using namespace std; void print(list<int>& l) { for (list<int>::iterator b=l.begin(); b != l.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { list<int> l; for (int i = 0; i < 10; i++) { l.push_back(i); } cout << "反转前" << endl; print(l); cout << "反转后" << endl; l.reverse(); print(l); } int main() { test1(); return 0; }
排序
在容器当中,可以使用一个算法函数来对容器内的数据进行一个排序,默认从小到大,但是是对于支持随机访问的迭代器,可以使用标准算法,对于list这种不支持随机访问的迭代器,是不可以用标准算法的,只能用类内的算法
sort();//排序
使用:
#include<iostream> #include<list> using namespace std; void print(list<int>& l) { for (list<int>::iterator b=l.begin(); b != l.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { list<int> l; for (int i = 9; i >=0; i--) { l.push_back(i); } print(l); l.sort(); print(l); } int main() { test1(); return 0; }
那想从大到小排呢?这个时候需要一个函数,函数返回类型为bool,内部可以让传参的两个参数进行比较,任何前者大于后者,返回真,如果小于返回假,返回假就会进行交换
#include<iostream> #include<list> using namespace std; void print(list<int>& l) { for (list<int>::iterator b=l.begin(); b != l.end(); b++) { cout << *b << " "; } cout << endl; } bool com(int a, int b) { return a > b;//可以简化成这样,返回的是a>b的结果,如果结果是对的,不进行交换,如果不对,进行交换 } void test1() { list<int> l; for (int i = 0; i < 10; i++) { l.push_back(i); } print(l); l.sort(com); print(l); } int main() { test1(); return 0; }
下一座石碑
这座石碑倒下了,露出了下一座石碑…
😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔
🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉