【C++】list的使用(上)

简介: 【C++】list的使用(上)

1. list的使用


首先,在使用list之前,我们得先了解list到底是个什么东西,查看文档可以了解到,list的底层是一个带头双向循环链表。

a5c05a71fe546d2c2c68070492722091.png按照顺序,我们首先来了解一下list的默认成员函数,这里我们不关注后面关于allocator的参数。


1. 构造函数

2c487e76faed6b7b4b3805f78bfa9745.png

接下来通过一段代码来了解一下:

void Test_construct()
{
  list<int> lt1;
  list<int> lt2(5, 2);
  list<int> lt3(lt2.begin(), lt2.end());
  list<int> lt4(lt3);
}


8a0d2aac933a30ca6d90a1fc2e592f56.png

2.迭代器的使用和数据访问

我们知道,迭代器设计模式的出现就是为了让所有的容器都有统一的访问方式,所以这里迭代器的使用与之前讲的string和vector没有任何区别。

void Test_Iterator()
{
  list<int> lt;
  lt.push_back(1);
  lt.push_back(2);
  lt.push_back(3);
  lt.push_back(4);
  lt.push_back(5);
  lt.push_back(6);
  //写
  list<int>::iterator it = lt.begin();
  while (it != lt.end())
  {
    *it *= 10;
    ++it;
  }
  //读
  it = lt.begin();
  while (it != lt.end())
  {
    cout << *it << " ";
    ++it;
  }
  cout << endl;
}


但是对于string和vector,我们对其中数据访问的方式有三种:[]下标访问,迭代器,范围for。其中使用[]访问的目的是为了访问到任意元素的时间复杂度都为O(1),但是对于list的结构:链表,我们,没办法做到O(1)的访问,所以这里就没有重载[]的必要了所以对于list的访问方式只有迭代器和范围for两种。


3. 容量相关

1. size:拿到list的数据个数

由于list的结构,所以不会出现有容量的概念,因为每次插入数据或者删除数据的时候,直接插入或删除一个节点即可。所以这里只提供了size这个接口用于返回数据个数。

5dbc82557af13a7be0bf73629375b06a.png

2. resize:改变数据个数

1a05afa6479bf68f630882b9334f31a2.png

和其他STL容器的接口相同的用法


3. clear:清空容器中的所有数据

ac9929f61ee2d935bd91e2c862938b43.png

void Test_Capacity()
{
  list<int> lt;
  lt.push_back(1);
  lt.push_back(2);
  lt.push_back(3);
  lt.push_back(4);
  lt.push_back(5);
  lt.push_back(6);
  cout << "size:" << lt.size() << endl;
  lt.resize(5);
  cout << "size:" << lt.size() << endl;
  lt.resize(10, 20);
  cout << "size:" << lt.size() << endl;
  auto begin = lt.begin();
  while (begin != lt.end())
  {
    cout << *begin << " ";
    ++begin;
  }
  cout << endl;
  lt.clear();
  cout << "size:" << lt.size() << endl;
}

c8111a10d6bee0df9163331a90acd7b2.png

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