C++数据结构之list详解

C++数据结构之list详解

什么是list?

list是C++ STL库中的一个数据结构,它能够以O(1)的复杂度在任何位置进行插入或删除操作,当然它也支持随机访问指定位置的元素。list属于双向链表,它内部结构为指针连接不同的节点。

如何使用list?

包含头文件

在C++中使用list,需要包含头文件#include <list>

定义list变量

定义一个list变量的语法是list<数据类型> 变量名。例如,我们定义了一个存储整数类型的list变量:

list<int> myList;

在list中插入元素

在list中插入元素的语法是list名.push_back(元素)list名.push_front(元素)。其中,push_back在list末尾插入元素,push_front在list头部插入元素。

例如:

list<int> myList;
myList.push_back(1);
myList.push_back(2);
myList.push_front(0);

最终myList中的元素为0,1,2。

访问list中的元素

对于list,不能像数组一样用下标访问元素。我们可以使用迭代器访问list中的元素。迭代器是一种用于遍历容器内元素的机制,类似指针。list有两种迭代器:begin和end,其中begin表示list的第一个元素,end表示list尾部的下一个位置。

我们可以用一个for循环遍历list中的元素:

list<int> myList;
myList.push_back(1);
myList.push_back(2);
myList.push_back(3);

list<int>::iterator itr;
for (itr = myList.begin(); itr != myList.end(); itr++) {
  cout << *itr << " ";
}

输出会是:1 2 3。

在list中删除元素

在list中删除元素的语法是list名.remove(元素)。例如:

list<int> myList;
myList.push_back(1);
myList.push_back(2);
myList.push_back(3);
myList.remove(2);

最终myList中的元素为1,3。

list示例

下面我们通过两个示例来演示list的使用。

示例1:排序list

我们创建一个list变量并将一些随机数插入其中,然后对它进行排序。最后,我们使用迭代器遍历list并打印排序后的结果。

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>

using namespace std;

int main() {
  list<int> myList;
  myList.push_back(42);
  myList.push_back(23);
  myList.push_back(67);
  myList.push_back(11);
  myList.push_back(8);

  myList.sort();

  cout << "排序后的list:\n";
  copy(myList.begin(), myList.end(), ostream_iterator<int>(cout, " "));

  cout << endl;

  return 0;
}

打印结果为:排序后的list:8 11 23 42 67

示例2:重载运算符操作list

我们创建一个放置字符串的list,然后编写一个函数,该函数可以输出list中所有字符串的大写版本。

#include <iostream>
#include <list>
#include <cctype>

using namespace std;

void toUpper(string& s) {
  for (int i = 0; i < s.size(); i++) {
    s[i] = toupper(s[i]);
  }
}

int main() {
  list<string> myList;

  myList.push_back("apple");
  myList.push_back("banana");
  myList.push_back("grape");
  myList.push_back("orange");
  myList.push_back("peach");

  for (auto& s : myList) {
    toUpper(s);
    cout << s << endl;
  }

  return 0;
}

输出结果为:

APPLE
BANANA
GRAPE
ORANGE
PEACH

结语

本文介绍了list的基本使用方法,包括定义、插入、访问、删除,同时也演示了两个list的示例,其中一个是排序list,另一个是重载运算符操作list。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++数据结构之list详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C++实现LeetCode(211.添加和查找单词-数据结构设计)

    首先,我们需要先了解一下题目的要求和限制,以及具体的解题思路。 题目描述 设计一个支持添加、删除、查找单词的数据结构。添加和删除单词的操作需要支持普通词和通配符’.’。查找单词只支持普通词,不支持通配符’.’。所有单词都是非空的。 解题思路 这道题可以使用前缀树(Trie树)来实现。 首先,我们需要定义一个单词类,它包含两个字段:单词字符串和单词长度。然后,…

    数据结构 2023年5月17日
    00
  • C语言数据结构与算法时间空间复杂度基础实践

    C语言数据结构与算法时间空间复杂度基础实践攻略 基本概念 时间复杂度:算法在执行时所需要的基本操作数,通常用O(n)表示,其中n是输入数据的规模。时间复杂度越小,算法执行所需要的时间越少,算法效率越高。 空间复杂度:算法在执行时所需要的额外空间数,通常用O(S)表示,其中S是额外的空间数。空间复杂度越小,所需的额外空间越少,算法的内存效率越高。 实践步骤 1…

    数据结构 2023年5月17日
    00
  • C++LeetCode数据结构基础详解

    C++LeetCode数据结构基础详解攻略 什么是LeetCode? LeetCode是一个专门为程序员提供的算法题平台。平台上汇集了各种算法、数据结构和编程题,用户可以在平台上挑战各种难度的算法用来提高自己的编程能力和算法素养。 如何学习LeetCode? 学习LeetCode的关键是掌握数据结构和算法。下面介绍如何结合具体的C++代码来学习LeetCod…

    数据结构 2023年5月17日
    00
  • JS中的算法与数据结构之链表(Linked-list)实例详解

    JS中的算法与数据结构之链表(Linked-list)实例详解 什么是链表? 链表是计算机科学中的一种数据结构,由一系列结点(Link,也称为节点)组成,并通过每个节点中的指针(Pointer)链接在一起。每个节点包含数据和一个指向某个位置的引用。 链表的主要特点是在插入和删除操作中表现出很高的效率。与数组相比,链表的访问和操作速度较慢,但在处理动态结构数据…

    数据结构 2023年5月17日
    00
  • 【ACM算法竞赛日常训练】DAY5题解与分析【储物点的距离】【糖糖别胡说,我真的不是签到题目】| 前缀和 | 思维

    DAY5共2题: 储物点的距离(前缀和) 糖糖别胡说,我真的不是签到题目(multiset,思维) ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 原文链接(阅读原文获得更好阅读体验):https://www.eri…

    算法与数据结构 2023年4月18日
    00
  • C++抽象数据类型介绍

    C++抽象数据类型介绍 什么是抽象数据类型? 抽象数据类型(Abstract Data Type,ADT),是数据类型的一个数学模型。它实现了数据类型的抽象过程,将数据与操作分离,使得操作具有独立性,而数据只作为函数参数和返回值存在。 举个例子,ADT可以定义一个栈(Stack),栈的实现需要以下操作: 初始化栈 压入数据 弹出数据 获取栈顶数据 检查栈是否…

    数据结构 2023年5月17日
    00
  • 字符串算法–$\mathcal{KMP,Trie}$树

    \(\mathcal{KMP算法}\) 实际上,完全没必要从\(S\)的每一个字符开始,暴力穷举每一种情况,\(Knuth、Morris\)和\(Pratt\)对该算法进行了改进,称为 \(KMP\) 算法。 而\(KMP\)的精髓在于,对于每次失配之后,我都不会从头重新开始枚举,而是根据我已经得知的数据,从某个特定的位置开始匹配;而对于模式串的每一位,都有…

    算法与数据结构 2023年4月18日
    00
  • InputStream数据结构示例解析

    InputStream数据结构示例解析 InputStream是Java中一个重要的数据结构,它表示可以从其中读取数据的输入流。通常情况下,它表示的是用来读取字节流数据的输入流。在本篇攻略中,我们将会详细解释如何使用InputStream数据结构来读取字节流数据,并且给出两条具体的读取示例。 InputStream类的继承结构 InputStream类是一个…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部