std::forward_list односвязный список С++ по которому можно пройтись только вперед

- forward_list это односвязный список по которому можно пройтись только вперед. Подключается через #include <forward_list>;

- Вставка разрешена только в начало списка или после указанного итератора.

МетодОписаниеПримерСложность
assign(size_t size, T value) Делает список размером size и значениями value fl.assign(5, 3); O(n)
assign(iterator it_start, iterator it_stop) Делает список из диапазона итераторов другого контейнера. fl.assign(v.begin() + 2, v.end()); O(n)
assign(initializer_list<value_type> il) Делает список из значений списковой инициализации fl.assign({5, 6, 7}); O(n) C++11
before_begin() Возвращает итератор перед первым элементом. Применяется в функциях *_after() auto i = fl.before_begin(); O(1)
begin() Возвращает итератор на первый элемент. auto i = fl.begin(); O(1)
clear() Удаляет все элементы списка. fl.clear(); O(n)
emplace_after(iterator it, T value) Вставляет значение value после итератора it fl.emplace_after(fl.before_begin(), 100); O(1)
emplace_front(T value) Вставляет значение value в начало очереди fl.emplace_front(100); O(1)
empty() Возвращает пустой ли список. if(!fl.empty()); O(1)
end() Возвращает итератор на место после последнего элемента списка. auto i = fl.end(); O(1)
erase_after(iterator pos) Удаляет элемент после заданного итератора. fl.erase_after(fl.before_begin()); O(1)
erase_after(iterator it_begin, iterator it_end) Удаляет элементы от после итератора it_begin до it_end fl.erase_after(fl.begin(), fl.end()); O(n)
front() Доступ к первому элементу. cout << fl.front(); O(1)
insert_after(iterator pos, T value ) Вставляет элемент в заданную позицию. fl.insert_after(fl.before_begin(), 10); O(1)
insert(iterator pos, initializer_list<value_type> il) Вставляет элементы списка в заданную позицию. fl.insert_after(fl.begin(), {3, 4, 5}); O(n)
insert(iterator pos, T value ) Вставляет элементы в заданную позицию из диапазона итераторов. fl.insert_after(fl.begin(), v.begin(), v.end()); O(n)
forward_list Конструктор без аргументов. Создает новый пустой список. forward_list<int> fl; O(1)
forward_list(int size) Конструктор. Создает список с заданным количеством нулевых элементов forward_list<int> fl(10); O(n)
forward_list(int size, int value) Конструктор. Создает список с количеством элементов size и значением value vector<int> fl(10, 3); O(n)
forward_list(const forward_list v) Конструктор копирования. Создает список со значениями списка ls forward_list<int> fl1(fl); O(n)
forward_list(iterator it_start, iterator it_stop) Конструктор. Создает список из диапазона итераторов другого контейнера. forward_list<int> fl(++v.begin(), --v.end()); O(n)
max_size() Возвращает максимально возможный размер списка. size_t msize = fl.max_size(); //576460752303423487 O(1)
merge(forward_list& fl1) Слияние текущего списка и fl1 fl.merge(fl1); O(1)
pop_front() Удаляет первый элемент списка. fl.pop_back(); O(1)
push_front(const T& value) Вставляет элемент со значением value в начало списка. fl.push_front(10); O(1)
remove(const T& value) Удаляет все элементы из списка с заданным значением fl.remove(2); O(n)
remove_if(Predicate pred) Удаляет все элементы в соответствии с предикатом (функция возвращающая bool) fl.remove_if(my_func); O(n)
resize(size_t new_size) Изменяет количество элементов списка до new_size fl.resize(1000); O(n)
reverse() Инвертирует порядок элементов списка fl.reverse(); O(n)
sort() Сортирует элементы списка по возрастанию fl.sort(); O(N*log(N))
splice_after(iterator it, forward_list& fl1) Перемещает после итератора it список fl1 fl.splice_after(fl.before_begin(), fl1); O(1)
splice_after(iterator it, forward_list& fl1, iterator its) Перемещает на место итератора it, элемент идущий после its из списка ls1 (с удалением элемента из ls1) fl.splice_after(fl.before_begin(), fl1, fl1.begin()); O(1)
splice_after(iterator it, forward_list& fl1, iterator it_start, iterator it_stop) Перемещает на место итератора it, диапазон [++it_start, it_stop] из списка ls1 (с удалением элементов из ls1) fl.splice_after(fl.before_begin(), fl1, fl1.begin(), fl1.end()); O(n)
swap(forward_list& fl1) Обменивает содержимое списков fl.swap(fl1); O(1)
unique() Удаляет элементы с повторяющимися значениями из списка если они идут подряд, предварительно нужно сортировать sort() fl.unique(); O(n)

#include <forward_list> // forward_list
#include <iostream> // cout

int main() {
    std::forward_list<int> fl = {3, 42, 5}; // Создаем список целочисленных значений
    fl.push_front(2);   // Вставляем в начало списка элемент со значением 2

    auto iter = std::next(fl.begin()); // Итератор указывает на следующий элемент после первого (3)
    iter = fl.erase_after(iter); // Удаляем элемент  за итератором (42)
    fl.insert_after(iter, 4); // Вставляет элемент за итератором

    for (int x : fl) {
        std::cout << x << " ";  // 2 3 5 4
    }
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.