C++中 Forward List 和 List 的区别

C++中 Forward List 和 List 的区别

Forward List 是一种序列容器,允许单向顺序访问其数据。它包含相同类型的数据。在 STL 中,它使用单向链表实现,插入和删除需要常数时间。 此时,forward list 中的元素在内存中是分散的,通过将列表的每个元素与下一个元素链接来维护排序。因此,它可以高效利用内存。从 C++11 开始引入。

Forward List 的实现:

// CPP程序演示前向列表
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // 声明前向列表
    forward_list<int> flist1;
 
    // 使用 assign() 分配值
    flist1.assign({ 10, 12, 13, 15 });
 
    // 显示前向列表
    cout << "前向列表的元素是:";
    for (auto a : flist1)
        cout << a << " ";
    return 0;
}  
C++

输出:

前向列表的元素是:10 12 13 15
C++

List 也是一种序列容器,允许双向顺序访问其数据。它包含相同类型的数据。在 STL 中,它使用双向链表实现,插入和删除需要常数时间。它允许非连续的内存分配。列表的每个元素都有一个链接,指向其后面和前面的元素。由于其常数插入和删除时间和双向顺序访问,List 在排序算法中被广泛使用。

List 的实现:

// CPP程序演示列表
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // 声明一个列表
    list<int> list1;
 
    // 使用 assign() 分配值
    list1.assign({ 1, 2, 10, 15 });
 
    // 显示列表
    cout << "列表的元素是:";
    for (auto a : list1)
        cout << a << " ";
    return 0;
}  
C++

输出:

列表的元素是:1 2 10 15
C++

Forward List 和 List 的区别

Forward List List
使用单向链表实现 使用双向链表实现
占用的内存相对较少 占用的内存相对较多
插入和删除元素的开销较小,因为每个节点的指针较少,因此性能更好。 插入和删除元素的开销较大,因为每个节点的指针较多,因此性能较差。
仅支持单向顺序访问 支持双向顺序访问和反向访问
比 List 更高效 比 Forward List 更低效
通常用于需要单向顺序访问的场合,如实现二叉树、哈希表、栈等。 通常用于需要双向顺序访问的场合,如哈希中的链式法、图的邻接表表示等。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册