Список вперед в C ++ | Набор 1 (Введение и важные функции)

Опубликовано: 1 Января, 2022

Прямой список в STL реализует односвязный список. Впервые представленный в C ++ 11, прямой список более полезен, чем другие контейнеры, при операциях вставки, удаления и перемещения (например, сортировки) и позволяет вставлять и удалять элементы с постоянной времени.
Он отличается от списка тем, что прямой список отслеживает местоположение только следующего элемента, в то время как список отслеживает как следующий, так и предыдущий элементы, тем самым увеличивая пространство для хранения, необходимое для хранения каждого элемента. Недостатком прямого списка является то, что он не может повторяться в обратном направлении, и к его отдельным элементам нельзя получить прямой доступ.
Прямой список предпочтительнее списка, когда требуется только прямой обход (так же, как односвязный список предпочтительнее двусвязного списка), поскольку мы можем сэкономить место. Вот некоторые примеры: цепочка при хешировании, представление графа списком смежности и т. Д.
Операции со списком пересылки:
1. назначить () : - Эта функция используется для присвоения значений списку пересылки, другой ее вариант используется для присвоения повторяющихся элементов.

CPP

// C++ code to demonstrate forward list
// and assign()
#include<iostream>
#include<forward_list>
using namespace std;
int main()
{
// Declaring forward list
forward_list< int > flist1;
// Declaring another forward list
forward_list< int > flist2;
// Assigning values using assign()
flist1.assign({1, 2, 3});
// Assigning repeating values using assign()
// 5 elements with value 10
flist2.assign(5, 10);
// Displaying forward lists
cout << "The elements of first forward list are : " ;
for ( int &a : flist1)
cout << a << " " ;
cout << endl;
cout << "The elements of second forward list are : " ;
for ( int &b : flist2)
cout << b << " " ;
cout << endl;
return 0;
}

Выход:

 Элементами первого прямого списка являются: 1 2 3 
Элементами второго прямого списка являются: 10 10 10 10 10


2. push_front (): - Эта функция используется для вставки элемента в первую позицию в списке вперед. Значение этой функции копируется в пространство перед первым элементом в контейнере. Размер форвард-листа увеличивается на 1.
3. emplace_front (): - Эта функция аналогична предыдущей функции, но в ней не происходит операции копирования, элемент создается непосредственно в памяти перед первым элементом списка вперед.
4. pop_front (): - Эта функция используется для удаления первого элемента списка.

CPP

// C++ code to demonstrate working of
// push_front(), emplace_front() and pop_front()
#include<iostream>
#include<forward_list>
using namespace std;
int main()
{
// Initializing forward list
forward_list< int > flist = {10, 20, 30, 40, 50};
// Inserting value using push_front()
// Inserts 60 at front
flist.push_front(60);
// Displaying the forward list
cout << "The forward list after push_front operation : " ;
for ( int &c : flist)
cout << c << " " ;
cout << endl;
// Inserting value using emplace_front()
// Inserts 70 at front
flist.emplace_front(70);
// Displaying the forward list
cout << "The forward list after emplace_front operation : " ;
for ( int &c : flist)
cout << c << " " ;
cout << endl;
// Deleting first value using pop_front()
// Pops 70
flist.pop_front();
// Displaying the forward list
cout << "The forward list after pop_front operation : " ;
for ( int &c : flist)
cout << c << " " ;
cout << endl;
return 0;
}

Выход:

 Список вперед после операции push_front: 60 10 20 30 40 50 
Список вперед после операции emplace_front: 70 60 10 20 30 40 50 
Список вперед после операции pop_front: 60 10 20 30 40 50

4. insert_after () Эта функция дает нам возможность вставлять элементы в любую позицию в списке вперед. Аргументы в этой функции копируются в нужную позицию.
5. emplace_after () Эта функция также выполняет ту же операцию, что и функция выше, но элементы создаются напрямую без каких-либо операций копирования.
6. erase_after () Эта функция используется для удаления элементов из определенной позиции в списке вперед.

Выход:

 Список вперед после операции insert_after: 10 1 2 3 20 30 
Список вперед после операции emplace_after: 10 1 2 3 2 20 30 
Список вперед после операции erase_after: 10 1 2 3 2 30

7. remove (): - Эта функция удаляет конкретный элемент из прямого списка, упомянутого в ее аргументе.
8. remove_if (): - Эта функция выполняет удаление в соответствии с условием в ее аргументе.

CPP

// C++ code to demonstrate working of remove() and
// remove_if()
#include<iostream>
#include<forward_list>
using namespace std;
int main()
{
// Initializing forward list
forward_list< int > flist = {10, 20, 30, 25, 40, 40};
// Removing element using remove()
// Removes all occurrences of 40
flist. remove (40);
// Displaying the forward list
cout << "The forward list after remove operation : " ;
for ( int &c : flist)
cout << c << " " ;
cout << endl;
// Removing according to condition. Removes
// elements greater than 20. Removes 25 and 30
flist.remove_if([]( int x){ return x>20;});
// Displaying the forward list
cout << "The forward list after remove_if operation : " ;
for ( int &c : flist)
cout << c << " " ;
cout << endl;
return 0;
}

Выход:

 Список вперед после операции удаления: 10 20 30 25 
Список вперед после операции remove_if: 10 20

9. splice_after (): - Эта функция передает элементы из одного прямого списка в другой.

CPP

// C++ code to demonstrate working of
// splice_after()
#include<iostream>
#include<forward_list> // for splice_after()
using namespace std;
int main()
{
// Initializing forward list
forward_list< int > flist1 = {10, 20, 30};
// Initializing second list
forward_list< int > flist2 = {40, 50, 60};
// Shifting elements from first to second
// forward list after 1st position
flist2.splice_after(flist2.begin(),flist1);
// Displaying the forward list
cout << "The forward list after splice_after operation : " ;
for ( int &c : flist2)
cout << c << " " ;
cout << endl;
return 0;
}

Выход:

 Список вперед после операции splice_after: 40 10 20 30 50 60

Еще несколько методов forward_list:

  • front () - эта функция используется для ссылки на первый элемент контейнера списка пересылки.
  • begin () - функция begin () используется для возврата итератора, указывающего на первый элемент контейнера прямого списка.
  • end () - функция end () используется для возврата итератора, указывающего на последний элемент контейнера списка.
  • cbegin () - возвращает постоянный итератор, указывающий на первый элемент forward_list.
  • cend () - возвращает постоянный итератор, указывающий на последний элемент forward_list.
  • before_begin () - возвращает итератор, который указывает на позицию перед первым элементом forward_list.
  • cbefore_begin () - возвращает постоянный итератор произвольного доступа, который указывает на позицию перед первым элементом forward_list.
  • max_size () - возвращает максимальное количество элементов, которое может содержать forward_list.
  • resize () - изменяет размер forward_list.

Список вперед в C ++ | Набор 2 (Управление функциями)
Автором этой статьи является Манджит Сингх. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью метода влиятельности. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++ C