Forward_list контейнерът предоставя прилагането на Списък с единично свързан списък Структура на данните. Той съхранява данни в непредвидена памет, където всеки елемент сочи към следващия елемент в последователността. Това прави поставянето и изтриването по -бързо, след като позицията на елемента е известна.
Синтаксис
Списъкът напред се определя като std :: forward_list шаблон за клас вътре в< forward_list > Заглавен файл.
forward_list
fl;
Къде
- T: Тип данни на елементите в списъка напред.
- F: Име, присвоено в списъка за преразглеждане.
Декларация и инициализация
A 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
Пример: В горната програма ние сме прост инициализиран списък напред по три начина:
- Изявление forward_list
Fl1 Създава празен списък напред на цели числа. - Изявление forward_list
FL2 (34) Създава списъка с напред с размер 3 и с всеки елемент е 4. - Изявление forward_list
fl3 = {1 5 3 4} Създава списък за напред и инициализира с елементите от списъка с инициализатор.
Основни операции
Ето основните операции, които можем да извършим в списък напред:
1. Достъп до елементи
Елементите на Forward List не могат да бъдат достъпни с помощта на индекси като масиви или вектори. Трябва да преминем през списъка последователно от началото на желаната позиция за достъп до него. Това може да стане чрез увеличаване begin () итератор, но е по -добре да се използва Следваща () или аванс () функция.
Въпреки това първият елемент от списъка може лесно да се осъществи чрез фронт () метод.
Пример:
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 () функция. След това се създава итератор и се премества една позиция напред с помощта на аванс () функция. След това елементът 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. Намиране на елемент
Списъкът напред не предоставя никаква функция на членовете за търсене на елемент, но можем да използваме find () Алгоритъм за намиране на дадена стойност.
tostring метод в java
Пример :
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. Преминаване
Списък за напред може да бъде прехвърлен с помощта на begin () и край () Итератори с цикъл, но ние можем само да се движим напред, а не назад.
Пример:
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. Изтриване на елементи
В списъка напред можем да изтрием елемента на дадената позиция с помощта на erase_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) |
| Достъп nthЕлемент | O (n) |
| Поставете отпред | O (1) |
| Поставете след конкретна позиция | O (n) |
| Изтрийте първи елемент | O (1) |
| Изтрийте след конкретна позиция | O (n) |
| Преминаване | O (n) |
Списък с напред срещу списъка
Функция | forward_list | списък |
|---|---|---|
Тип свързан списък | Списък с единично свързан списък | Двойно свързан списък |
Преминаване | Може само да премине напред напред видове машинно обучение | Може да премине както напред, така и назад |
Използване на паметта | Използва по -малко памет (само един показалец на възел) | Използва повече памет (два указателя на възел) |
Вмъкване/изтриване | Бързо вмъкване и изтриване, но само на или след дадена позиция | Бързо вмъкване и изтриване навсякъде (преди или след позиция) |
Поддържани функции | Ограничен в сравнение със списъка (без размер () без обратни итератори) | По -пълен интерфейс, включително размера () обратна () двупосочни итератори. |
| | |