C ++中前向列表和列表的区别
前向 List 是一个允许单向顺序访问其数据的序列容器。它包含相同类型的数据。在 STL 中,它已经使用单链表实现,它需要恒定的时间进行插入和删除。前向列表的元素分散在内存中,并且通过链接将列表的每个元素与列表的下一个元素相关联来维护排序。因此,它可以有效地利用内存。它是从 C++11 版本开始引入的。
前向列表的实现:
// CPP Program to demonstrate forward list
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
// Declaring forward list
forward_list<int> flist1;
// Assigning values using assign()
flist1.assign({ 10, 12, 13, 15 });
// Displaying forward list
cout << "The elements of forward list are : ";
for (auto a : flist1)
cout << a << " ";
return 0;
}
运行结果:
The elements of forward list are : 10 12 13 15
List 也是一个允许双向顺序访问其数据的序列容器。它包含相同类型的数据。在 STL 中,它是使用双向链表实现的,插入和删除需要恒定的时间。它允许不连续的内存分配。列表的每个元素都与指向它后面和前面的元素的链接相关联。由于其恒定的插入和删除时间和双向顺序访问,它被广泛用于排序算法。
List的实现:
// CPP Program to demonstrate list
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
// Declaring a list
list<int> list1;
// Assigning values using assign()
list1.assign({ 1, 2, 10, 15 });
// Displaying list
cout << "The elements of list are : ";
for (auto a : list1)
cout << a << " ";
return 0;
}
运行结果:
The elements of list are : 1 2 10 15
前向列表和列表之间的区别
前向列表 | 列表 |
---|---|
使用单链表实现 | 使用双链表实现 |
消耗相对较少的内存 | 消耗相对较多的内存 |
由于每个节点的指针更少,插入和删除元素的开销更少,因此它提供了更好的性能。 | 由于每个节点的指针更多,插入和删除元素的开销更大,因此性能较差。 |
正向顺序访问 | 正向和反向顺序访问 |
比前向列表更有效。 | 效率低于前向列表。 |
通常用于需要双向顺序访问的情况,例如实现哈希中的链接、图形的邻接表表示等。 | 通常用于需要单向顺序访问的情况,例如实现二叉树、哈希表、堆栈等。 |