C++
станд :: forward_list
Поиск…
Вступление
std::forward_list
- это контейнер, который поддерживает быструю установку и удаление элементов из любого места в контейнере. Быстрый случайный доступ не поддерживается. Он реализован как односвязный список и по существу не имеет каких-либо накладных расходов по сравнению с его реализацией в C. По сравнению с std::list
этот контейнер обеспечивает более экономичное пространство, когда двунаправленная итерация не нужна.
замечания
Добавление, удаление и перемещение элементов внутри списка или нескольких списков не приводит к недействительности итераторов, которые в настоящее время ссылаются на другие элементы в списке. Однако итератор или ссылка, ссылающаяся на элемент, недействительна, когда соответствующий элемент удаляется (через erase_after) из списка. std :: forward_list соответствует требованиям Container (за исключением функции члена размера и сложность оператора == всегда линейна), AllocatorAwareContainer и SequenceContainer.
пример
#include <forward_list>
#include <string>
#include <iostream>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::forward_list<T>& v) {
s.put('[');
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
s << comma << e;
comma[0] = ',';
}
return s << ']';
}
int main()
{
// c++11 initializer list syntax:
std::forward_list<std::string> words1 {"the", "frogurt", "is", "also", "cursed"};
std::cout << "words1: " << words1 << '\n';
// words2 == words1
std::forward_list<std::string> words2(words1.begin(), words1.end());
std::cout << "words2: " << words2 << '\n';
// words3 == words1
std::forward_list<std::string> words3(words1);
std::cout << "words3: " << words3 << '\n';
// words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}
std::forward_list<std::string> words4(5, "Mo");
std::cout << "words4: " << words4 << '\n';
}
Выход:
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
методы
Имя метода | Определение |
---|---|
operator= | присваивает значения контейнеру |
assign | присваивает значения контейнеру |
get_allocator | возвращает связанный распределитель |
------ | ------ |
Доступ к элементу | |
front | доступ к первому элементу |
------ | ------ |
итераторы | |
before_begi n | возвращает итератор элементу перед началом |
cbefore_begin | возвращает константный итератор элементу перед началом |
begin | возвращает итератор в начало |
cbegin | возвращает константный итератор в начало |
end | возвращает итератор до конца |
cend | возвращает итератор до конца |
Вместимость | |
empty | проверяет, пуст ли контейнер |
max_size | возвращает максимально возможное количество элементов |
Модификаторы | |
clear | очищает содержимое |
insert_after | вставляет элементы после элемента |
emplace_after | создает элементы на месте после элемента |
erase_after | стирает элемент после элемента |
push_front | вставляет элемент в начало |
emplace_front | сначала создает элемент на месте |
pop_front | удаляет первый элемент |
resize | изменяет количество сохраненных элементов |
swap | своп содержимого |
операции | |
merge | объединяет два отсортированных списка |
splice_after | перемещает элементы из другого forward_list |
remove | удаляет элементы, удовлетворяющие определенным критериям |
remove_if | удаляет элементы, удовлетворяющие определенным критериям |
reverse | меняет порядок элементов |
unique | удаляет последовательные дублирующие элементы |
sort | сортирует элементы |