Forward List is a sequence container that allows unidirectional sequential access to its data. It contains data of the same type. In STL, it has been implemented using Singly Linked List, which requires constant time for insertion and deletion. Elements of the forward list are scattered in the memory and the ordering is maintained by associating every element of the list by the next element of the list via a link. Thus, it makes efficient use of memory. It has been introduced from the C++11 version.
Implementation of Forward List:
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
forward_list< int > flist1;
flist1.assign({ 10, 12, 13, 15 });
cout << "The elements of forward list are : " ;
for ( auto a : flist1)
cout << a << " " ;
return 0;
}
|
Output: The elements of forward list are : 10 12 13 15
List is also a sequence container that allows bidirectional sequential access to its data. It contains data of the same type. In STL, it has been implemented using Doubly Linked List and it requires constant time for insertion and deletion. It allows non-contiguous memory allocation. Each element of the list is associated with a link to the element following it and preceding it. It is extensively used in sorting algorithm because of its constant insertion and deletion time and bidirectional sequential access.
Implementation of List:
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
list< int > list1;
list1.assign({ 1, 2, 10, 15 });
cout << "The elements of list are : " ;
for ( auto a : list1)
cout << a << " " ;
return 0;
}
|
Output: The elements of list are : 1 2 10 15
Difference Between Forward List and List
Forward List | List |
---|
Implemented using Singly Linked List | Implemented using Doubly Linked List |
Consumes relatively less memory | Consumes relatively more memory |
Less overhead in insertion and removal elements due to less pointer per node, thus it gives better performance. | More overhead in insertion and removal elements due to more pointer per node, thus it gives poor performance. |
Sequential access in forward direction | Sequential access in both forward and reverse direction |
More efficient than list. | Less efficient than forward list. |
Generally used when unidirectional sequential access is needed like for implementing binary tree, hash table, stack, etc. | Generally used when bidirectional sequential access is needed like for implementing chaining in hashing, adjacency list representation of graph, etc. |