Вперед_list контейнер забезпечує реалізацію Одинично пов'язаний список Структура даних. Він зберігає дані в недобросовісній пам'яті, де кожен елемент вказує на наступний елемент у послідовності. Це робить вставку та видалення швидше, коли буде відоме положення елемента.
Синтаксис
Передній список визначається як std :: forward_list Шаблон класу всередині< вперед_list > Файл заголовка.
вперед_list
fl;
де
- T: Тип даних елементів у списку вперед.
- F: Ім'я, призначене до списку вперед.
Декларація та ініціалізація
Forward_List може бути оголошений та ініціалізований декількома способами, як показано в наведеному нижче прикладі:
C++
#include using namespace std; void printFL(forward_list<int>& fl) { for (auto i : fl) cout << i << ' '; cout << 'n'; } int main() { // Creating an empty forward_list forward_list<int> fl1; // Creating a forward_list with // default value forward_list<int> fl2(3 4); // Creating a forward_list from an // initializer list forward_list<int> fl3 = {1 5 3 4}; printFL(fl2); printFL(fl3); return 0; }
Випуск
4 4 4 1 5 3 4
Приклад: У наведеній вище програмі ми простий ініціалізований вперед список трьома способами:
- Заява вперед_list
Fl1 Створює порожній список цілих числа. - Заява вперед_list
fl2 (34) Створює вперед список розміром 3, а кожен елемент - 4. - Заява вперед_list
fl3 = {1 5 3 4} Створює вперед список і ініціалізує з елементами, що утворюють список ініціалізатора.
Основні операції
Ось основні операції, які ми можемо виконати в передньому списку:
1. Доступ до елементів
Елементи вперед списку не можуть бути доступні за допомогою таких індексів, як масиви або вектори. Ми повинні переглядати список послідовно від початку до потрібної позиції, щоб отримати доступ до нього. Це можна зробити шляхом збільшення розпочати () Ітератор, але його краще використовувати Далі () або Advance () функція.
встановити maven
Однак перший елемент списку можна легко дістатися фронт () метод.
Приклад:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Access the first element cout << fl.front() << endl; // Access third element auto it = next(fl.begin() 2); cout << *it; return 0; }
Випуск
1 3
Приклад: У наведеній вище програмі перший елемент надруковано за допомогою фронт () метод. Для доступу до третього елемента Далі () використовується для переміщення ітератора двох позицій з самого початку і *це використовується для деференції ітератора.
2. Вставлення елементів
Елементи можна вставити в передовий список за допомогою insert_after () функція. Він вимагає ітератора, після якого елемент повинен бути вставлений. Однак швидке введення спереду підтримується push_front () метод.
Приклад:
C++#include using namespace std; int main() { forward_list<int> fl = {5 4}; // Inserting Element at front fl.push_front(1); // Insert 3 after the second element auto it = fl.begin(); advance(it 1); fl.insert_after(it 3); for (auto x: fl) cout << x << ' '; return 0; }
Випуск
1 5 3 4
Пояснення: У цій програмі перший елемент Forward_List вставлений спереду за допомогою push_front () функція. Потім створюється ітератор і переміщує одну позицію вперед за допомогою Advance () функція. Після цього елемент 5 вставляється після другого елемента за допомогою insert_after () функція.
3. Оновлення елементів
Значення існуючих елементів можна змінити просто, отримавши доступ до них та використовуючи Оператор призначення для призначення нового значення.
Приклад:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Updating first element fl.front() = 111; cout << fl.front() << endl; // Updating third element auto it = next(fl.begin() 2); *it = 333; cout << *it; return 0; }
Випуск
111 333
4. Пошук елемента
Передній список не надає жодної функції учасника для пошуку елемента, але ми можемо використовувати знайти () Алгоритм для пошуку будь -якого значення.
Приклад :
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Finding 3 auto it = find(fl.begin() fl.end() 3); if (it != fl.end()) cout << *it; else cout << 'Element not Found'; return 0; }
Випуск
3
5. Поїздка
Передній список можна пройти за допомогою розпочати () і end () Ітератори з петлею, але ми можемо рухатися лише вперед, а не назад.
Приклад:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Traversing using range-based for loop for(auto i : fl) cout << i << ' '; cout << endl; return 0; }
Випуск
1 5 3 4
6. Видалення елементів
У списку вперед ми можемо видалити елемент у заданому положенні за допомогою rease_after () метод. Цей метод переносить ітератор в одну позицію перед цільовим елементом. Швидке видалення спереду можливе використання pop_front () метод.
Приклад:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Delete first element fl.pop_front(); // Delete third element auto it = fl.begin(); advance(it 1); fl.erase_after(it); for (auto x: fl) cout << x << ' '; return 0; }
Випуск
5 3
7. Розмір переднього списку
Forward_list не має функції вбудованого розміру (). Щоб знайти його розмір, нам потрібно вручну підрахувати елементи, проходячи його з петлею або використовуючи відстань std ::.
C++#include #include #include using namespace std; int main() { forward_list<int> flist={10203040}; //Calculate size by counting elements using std:: distance int size=distance(flist.begin()flist.end()); cout<<'Size of forward_list: '<<size<<endl; return 0; }
Випуск
Size of forward_list: 4
8. порожній ()
Він використовується для перевірки, чи порожній Forward_List.
Він повертає істину, якщо список порожній і помилковий, інакше дозволяє швидко перевірити, чи не має контейнера даних.
#include #include using namespace std; int main() { forward_list<int> flist; if (flist.empty()) { cout << 'The forward_list is empty.' << endl; } flist.push_front(10); if (!flist.empty()) { cout << 'The forward_list is not empty.' << endl; } return 0; }
Випуск
The forward_list is empty. The forward_list is not empty.
Складність часу
У наведеній нижче таблиці перераховано складність часу вищезазначених операцій у передньому списку:
| Операція | Складність часу |
|---|---|
| Доступ до першого елемента | O (1) |
| Доступ Nтоелемент | O (n) |
| Вставте спереду | O (1) |
| Вставте після конкретного положення | O (n) |
| Видалити перший елемент | O (1) |
| Видалити після конкретної позиції | O (n) |
| Обхід | O (n) |
Список передачі проти списку проти
Означати | вперед_list | список |
|---|---|---|
Тип пов’язаного списку | Одинично пов'язаний список | Подвійно пов'язаний список |
Обхід | Може пройти лише вперед | Може пройти як вперед, так і назад |
Використання пам'яті | Використовує менше пам'яті (лише один вказівник на вузол) | Використовує більше пам'яті (два покажчики на вузол) |
Вставка/видалення відсортований список java | Швидке вставлення та видалення, але лише на заданій позиції або після нього | Швидке вставлення та видалення в будь -якому місці (до або після положення) |
Функції, що підтримуються | Обмежений порівняно зі списком (без розміру () без зворотних ітераторів) | Більш повний інтерфейс, включаючи розміру () зворотні () двонаправлені ітератори. |
| | |