遍历 C++ 中的列表
这个简短的编程教程将讨论 C++ 中广泛使用的数据结构,即 List
。在 C++ 标准模板库 (STL) 中,我们有一个可用于此数据结构的类 list
。
里面打包了一堆函数,可以用来对列表执行多个操作。在本文后面,我们将讨论如何遍历列表并查看或编辑列表。
C++ 中的列表
列表,或称链接列表,是一种线性数据结构,可以作为数据容器,将数据存储在内存中。与向量和数组不同,列表中的数据不存储在连续的内存位置。
相反,数据保存在随机内存位置。插入列表中的每个元素称为节点
。
列表中的每个节点
都包含一个指向列表下一个元素的指针。这就是为什么列表的元素没有保存在连续位置的原因;因此,它也被称为链表。
列表可以分为两种类型:
- 单链表
- 双向链表
单链表
在这种类型的链表中,所有的节点有 2 个部分,一个用于数据,一个用于存储指向下一个节点的指针。第二部分存储列表的下一个节点的地址。
双向链表
在这种类型的链表中,所有节点都有 3 部分,第一部分是指向前一个节点的指针,第二部分是存储数据,第三部分包含引用链表下一个元素的指针。
STL 中的 list
类包含一个双向链表。像数组一样,这种列表类型的插入和删除需要线性时间。
但是,列表不需要传染性内存块。此外,通过一次附加单个列表节点来增长列表比重新分配整个动态数组(如向量所做的)更容易和更合理。
因此,它被认为是比数组和向量等其他数据结构更灵活的数据结构。
另一种数据结构 forward_list
只能遍历一个方向并且是一个单链表。与其他数据结构相比,列表和前向列表的主要缺点是我们不能像在数组中一样通过给出其位置来直接访问任何列表元素。
例如,要访问列表中的第 5 个元素,必须从某个端点开始,无论是开始还是结束到该位置,这需要线性时间。列表还使用额外的 RAM 来存储每个元素的连接信息。
遍历 C++ 中的列表
我们可以使用标准模板库 C++ 的 iterator
类来遍历列表元素。其语法如下:
std::list<int>::iterator itr;
列表中有不同的迭代方法:
函数名称 | 描述 |
---|---|
itr.begin() |
给出指向列表第一个节点的指针。 |
itr.end() |
给出指向列表最后一个节点的指针。 |
让我们看看下面的代码,它使用了列表类的不同功能。
#include <iostream>
#include <iterator>
#include <list>
#include<cstdlib>
using namespace std;
void displaylist(list<int> l) //print function to show list
{
list<int>::iterator myitr;
for (myitr = l.begin(); myitr != l.end(); ++myitr)
cout<<" "<< *myitr;
cout<<endl;
}
int main(){
list<int> mylist1;
for (int a = 0; a < 10; ++a) {
int r = 1+ (rand() % 50);
mylist1.push_back(r);
}
cout << "\nData of List 1 : ";
displaylist(mylist1);
cout << "\nList first element : " << mylist1.front();
cout << "\nAfter we pop first element: ";
mylist1.pop_front();
displaylist(mylist1);
cout << "\nWhen we sort the list: ";
mylist1.sort();
displaylist(mylist1);
return 0;
}
输出:
Data of List 1 : 34 37 28 16 44 36 37 43 50 22
List first element : 34
After we pop first element: 37 28 16 44 36 37 43 50 22
When we sort the list: 16 22 28 36 37 37 43 44 50
相关文章
在 C++ 中通过掷骰子生成随机值
发布时间:2023/04/09 浏览次数:169 分类:C++
-
本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。
在 C++ 中使用模板的链表
发布时间:2023/04/09 浏览次数:158 分类:C++
-
本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。
在 C++ 中添加定时延迟
发布时间:2023/04/09 浏览次数:142 分类:C++
-
本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。
在 C++ 中创建查找表
发布时间:2023/04/09 浏览次数:155 分类:C++
-
本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。
如何在 C++ 中把字符串转换为小写
发布时间:2023/04/09 浏览次数:63 分类:C++
-
介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码
如何在 C++ 中确定一个字符串是否是数字
发布时间:2023/04/09 浏览次数:163 分类:C++
-
本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。
如何在 c++ 中查找字符串中的子字符串
发布时间:2023/04/09 浏览次数:65 分类:C++
-
本文介绍了在 C++ 中检查一个字符串是否包含子字符串的多种方法。使用 find 方法在 C++ 中查找字符串中的子字符串
如何在 C++ 中把字符串转换为 Char 数组
发布时间:2023/04/09 浏览次数:107 分类:C++
-
本文介绍了在 C++ 中把字符串转换为 char 数组的多种方法。使用 std::basic_string::c_str 方法将字符串转换为 char 数组