Как использовать библиотеку list в с
Контейнер list представляет двухсвязный список. Для его использования необходимо подключить заголовочный файл list .
Получение элементов
В отличие от других контейнеров для типа list не определена операция обращения по индексу или функция at(), которая выполняет похожую задачу.
Тем не менее для контейнера list можно использовать функции front() и back() , которые возвращают соответственно первый и последний элементы.
Чтобы обратиться к элементам, которые находятся в середине (после первого и до последнего элементов), придется выполнять перебор элементов с помощью циклов или итераторов:
Размер списка
Для получения размера списка можно использовать функцию size() :
Функция empty() позволяет узнать, пуст ли список. Если он пуст, то функция возвращает значение true, иначе возвращается значение false:
С помощью функции resize() можно изменить размер списка. Эта функция имеет две формы:
resize(n) : оставляет в списке n первых элементов. Если список содержит больше элементов, то он усекается до первых n элементов. Если размер списка меньше n, то добавляются недостающие элементы и инициализируются значением по умолчанию
resize(n, value) : также оставляет в списке n первых элементов. Если размер списка меньше n, то добавляются недостающие элементы со значением value
Изменение элементов списка
Функция assign() позволяет заменить все элементы списка определенным набором. Она имеет следующие формы:
assign(il) : заменяет содержимое контейнера элементами из списка инициализации il
assign(n, value) : заменяет содержимое контейнера n элементами, которые имеют значение value
assign(begin, end) : заменяет содержимое контейнера элементами из диапазона, на начало и конец которого указывают итераторы begin и end
Функция swap() обменивает значениями два списка:
Добавление элементов
Для добавления элементов в контейнер list применяется ряд функций.
push_back(val) : добавляет значение val в конец списка
push_front(val) : добавляет значение val в начало списка
emplace_back(val) : добавляет значение val в конец списка
emplace_front(val) : добавляет значение val в начало списка
emplace(pos, val) : вставляет элемент val на позицию, на которую указывает итератор pos. Возвращает итератор на добавленный элемент
insert(pos, val) : вставляет элемент val на позицию, на которую указывает итератор pos, аналогично функции emplace. Возвращает итератор на добавленный элемент
insert(pos, n, val) : вставляет n элементов val начиная с позиции, на которую указывает итератор pos. Возвращает итератор на первый добавленный элемент. Если n = 0, то возвращается итератор pos.
insert(pos, begin, end) : вставляет начиная с позиции, на которую указывает итератор pos, элементы из другого контейнера из диапазона между итераторами begin и end. Возвращает итератор на первый добавленный элемент. Если между итераторами begin и end нет элементов, то возвращается итератор pos.
insert(pos, values) : вставляет список значений values начиная с позиции, на которую указывает итератор pos. Возвращает итератор на первый добавленный элемент. Если values не содержит элементов, то возвращается итератор pos.
Функции push_back() , push_front() , emplace_back() и emplace_front() :
Добавление в середину списка с помощью функции emplace() :
Добавление в середину списка с помощью функции insert() :
Удаление элементов
Для удаления элементов из контейнера list могут применяться следующие функции:
clear(p) : удаляет все элементы
pop_back() : удаляет последний элемент
pop_front() : удаляет первый элемент
erase(p) : удаляет элемент, на который указывает итератор p. Возвращает итератор на элемент, следующий после удаленного, или на конец контейнера, если удален последний элемент
erase(begin, end) : удаляет элементы из диапазона, на начало и конец которого указывают итераторы begin и end. Возвращает итератор на элемент, следующий после последнего удаленного, или на конец контейнера, если удален последний элемент
Как организовать работу со списками(list) [закрыт]
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 5 лет назад .
Дано последовательность с n элементов, нужно в начало поставить отрицательные числа а потом положительные, например есть последовательность <4, -3, 7, 1, -2, -45, 0, -2>программа должна вывести: -3 -2 -45 -2 4 7 1 0.
Нужно использовать библиотеку list.
например можно так — берёте два итератора, один сначала идёт для положительных вставляя назад, другой с конца вставляя спереди отрицательные, всё очень просто
Имеется стандартный алгоритм std::stable_partition , объявленный в заголовке <algorithm> ,который разбивает множество элементов на две части согласно некоторому критерию и при этом сохраняет порядок следования элементов в последовательности.
Этот алгоритм возвращает итератор, который указывает на границу между двумя полученными подмножествами исходного множества.
Поэтому все, что вам требуется сделать, это просто вызвать этот алгоритм.
Ниже приведена демонстрационная программа вызова алгоритма.
Вывод программы на консоль
Не сложно также написать соответствующую программу для списка самостоятельно, на заводя при этом новый список. Аналогично стандартному алгоритму можно также получить итератор, который определяет границу между двумя полученными подмножествами исходного множества элементов.
Вот как это можно сделать.
Вывод программы на консоль
Как видно из вывода на консоль обоих этих демонстрационных программ, порядок следования элементов после разбития исходного множества на подмножества сохраняется.
Как использовать библиотеку list в с
В С++ контейнер list задаёт стандартные двунаправленные списки. В эти списки можно быстро вставлять, а также удалять элементы. Однако операция обращения к элементу по номеру долгая.
Использование list требует подключения
Объявляется список так:
При работе со списком можно воспользоваться указателями:
- myL.begin() — указатель на начало списка,
- myL.end() — указатель на конец списка,
- myL.rbegin() — реверсивный указатель на конец списка,
- myL.rend() — реверсивный указатель на начало списка.
Полезна также функция проверки списка на пустоту:
- myL.empty().
Основные функции, для работы с отдельными элементами списка:
- myL.push_back(e) — добавить в конец элемент,
- myL.pop_back() — удалить последний элемент,
- myL.front() — первый элемент списка,
- myL.back() — последний элемент списка,
- myL.insert(i, e) — вставка элемента в позицию i,
- myL.erase(first,last) — удаляет последовательность элементов.
При работе со списками, чтобы удобно было по списку ходить, можно пользоваться итераторами, например,