第九层(7):STL之list(下)

简介: 第九层(7):STL之list(下)


单个数据访问


因为在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;
}

0eacb84100b54626af849e6b562bf92a.png


反转操作


在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;
}

0a2653c851af460fa595bd959398a8f1.png


排序


在容器当中,可以使用一个算法函数来对容器内的数据进行一个排序,默认从小到大,但是是对于支持随机访问的迭代器,可以使用标准算法,对于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;
}

0eacb84100b54626af849e6b562bf92a.png

那想从大到小排呢?这个时候需要一个函数,函数返回类型为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;
}

2d65d23f6d4748949b924e4057485923.png


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉

相关文章
|
2月前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
42 1
|
2月前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
69 7
|
4月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
100 2
|
4月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
90 5
|
4月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
103 2
|
4月前
|
C++
【C++】C++ STL 探索:List使用与背后底层逻辑(三)
【C++】C++ STL 探索:List使用与背后底层逻辑
|
4月前
|
C++
【C++】C++ STL 探索:List使用与背后底层逻辑(二)
【C++】C++ STL 探索:List使用与背后底层逻辑
|
8月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1120 1
|
7月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
7月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。