list以及使用举例--C++基础

简介: list以及使用举例--C++基础

序列式容器:

list是一个双向列表,它不是像vector那种连续线性空间,每次插入或者删除一个元素的时候,就配置或释放一个元素空间,因此list对空间不浪费。


list不仅是一个双向列表,还是一个环状双向列表,它执行插入操作时候,会插入到迭代器所在位置之前。


先看代码示例:

#include"Test.h"
#include<vector>
#include<list>
#include<array>
#include<algorithm>//为了使用find、sort等方法
void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  //用list实现增改删除
  list<int> v1;
  //初始化
  v1.push_back(0);
  v1.push_back(2);
  v1.push_back(1);
  v1.push_front(3);
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << *v2 << endl;
  }
  list<int>::iterator v3 = find(v1.begin(), v1.end(), 2);
  if (*v3 == 2)
  {
    //增
    v1.insert(v3, 8);
  }
  v3 = find(v1.begin(), v1.end(), 1);
  if (*v3 == 1)
  {
    //改
    *v3 = 99;
  }
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();)
  {
    //查
    if (*v2 == 2)
    {
      //删
      v2 = v1.erase(v2);
    }
    else
    {
      v2++;
    }
  }
  //sort(v1.begin(), v1.end());
  int v5[4] = { 9,7,8,6 };
  list<int> v7(v5, v5 + 4);
  v3 = find(v1.begin(), v1.end(), 8);
  v1.splice(v3, v7);//插入一个list列表
  v1.reverse();//反转列表
  v1.sort();//排序
  for (list<int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << *v2 << endl;
  }
  getchar();
}

还有需要注意的一点是,不能调用全局的那个sort函数对list进行排序,需要用其内部的排序函数进行排序。


如果这样写:sort(v1.begin(), v1.end());

那么会发生编译报错:

image.png

我们需要使用其内部定义的函数进行排序操作:

v1.sort();

原因:

list不能使用STL的sort算法,必须使用自己的成员函数,因为STL的sort的函数只接受RamdonAccessIterator(随机访问迭代器,类似于vector的返回迭代器),其内部成员函数使用快速排序。


image.png

调试信息:

image.png


image.png


image.png


image.png


image.png


image.png


image.png

“It matters not what someone is born,but what they grow to be.”

参考资料:

《STL源码剖析》

目录
相关文章
|
9月前
|
算法 C++ 容器
模拟实现c++中的list模版
模拟实现c++中的list模版
|
11月前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
247 1
|
11月前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
367 7
|
11月前
|
存储 编译器 C++
C++ initializer_list&&类型推导
在 C++ 中,`initializer_list` 提供了一种方便的方式来初始化容器和传递参数,而右值引用则是实现高效资源管理和移动语义的关键特性。尽管在实际应用中 `initializer_list&&` 并不常见,但理解其类型推导和使用方式有助于深入掌握现代 C++ 的高级特性。
164 4
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
224 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
存储 算法 C++
【C++打怪之路Lv10】-- list
【C++打怪之路Lv10】-- list
132 1
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
228 5
|
存储 C++ 容器
C++入门9——list的使用
C++入门9——list的使用
144 1
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
226 2
【C++】C++ STL 探索:List使用与背后底层逻辑(三)
【C++】C++ STL 探索:List使用与背后底层逻辑
160 2

热门文章

最新文章