Список вперед в C ++ | Набор 1 (Введение и важные функции)
Прямой список в 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, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.