- 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
}
}