- •2 Часть
- •Источники информации
- •1.2 Введение вStl
- •1.2.1 Обзор библиотеки
- •1.2.2 Базовые понятия
- •2 Контейнеры
- •2.1 Простые контейнеры
- •2.1.1 Пара (Pair/Tuple)
- •2.2 Контейнеры с последовательным доступом
- •2.2.1 Вектор (vector)
- •2.2.2 Список (list)
- •2.2.3Forward_list
- •2.2.4 Очередь двухсторонняя (deque)
- •2.3 Контейнеры-адаптеры
- •2.3.1 Очередь односторонняя (queue)
- •2.3.2 Очередь с приоритетами (priority queue)
- •2.3.3 Стек (stack)
- •2.4 Контейнеры с доступом к случайным элементам
- •2.4.1 Упорядоченное множество элементов (set)
- •2.4.2Multiset
- •2.4.3 Словарь (map)
- •2.4.4Multimap
- •3 Итераторы
- •4 Алгоритмы
- •4.1 Не модифицируют коллекцию
- •4.1.1 All_of / any_of / none_of
- •4.1.2For_each
- •4.1.3 Find / find_if / find_if_not / find_end / find_first_of
- •4.1.4Count/count_if
- •4.2.2Move/move_backward
- •4.4.2Partial_sort/partial_sort_copy
- •6 БудущееStl
- •7 Наследование и работа с памятью вStl
4.2.2Move/move_backward
Перемещает диапазон элементов.
4.2.3swap/swap_ranges
Swapобменивает состояния двух объектов: единичных объектов или коллекций.Swap_rangesобменивает диапазоны значений.
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int _tmain()
{
vector<int> data1 = {13, 666};
vector<int> data2 = {22, 444};
swap(data1, data2);
int x = 13;
int y = 666;
swap(x, y);
getchar();
return 0;
}
4.2.4transform
Выполняет какое-то преобразование над каждым элементом диапазона и куда-то сохраняет результаты.
4.2.5 replace / replace_if / replace_copy / replace_copy_if
Replaceзаменяет одно значение на другое по всей коллекции.
Replace_ifзаменяет значения на другое, если эти значения удовлетворяют функтор.
Replace_copyкопировать с заменой одного значения на другое.
Replace_copy_ifкопировать с заменой значений на другое значение, удовлетворяющих функтор.
4.2.6fill/fill_n
Fillзаполняет диапазон заданным значением.Fill_nзаполняетnпервых значений, начиная с заданного.
4.2.7generate/generate_n
Generateзаполняет диапазон значений теми, что генерируются функтором.Generate_n заполняет только первых n значений.
4.2.8 remove / remove_if / remove_copy / remove_copy_if
Removeработает как иreplace, только удаляет элементы.
4.2.9unique/unique_copy
Uniqueудаляет неуникальные элементы, расположенные друг за другом.
Unique_copyудалить неуникальные элементы, расположенные друг за другом, при копировании.
4.2.10reverse/reverse_copy
Reverseобращает порядок, в котором хранятся элементы в коллекции.
4.2.11rotate/rotate_copy
Поворот коллекции так, что средний элемент становится первым.
4.2.12shuffle/random_shuffle
Shuffleперемешивает элементы в коллекции.Random_shuffleиспользует для перемешивания еще и функтор.
4.3 Расположения элементов в коллекции (партиции)
4.3.1is_partioned
Проверяет что в начале коллекции есть элементы, удовлетворяющие функтору (первая партиция), а все остальные – не удовлетворяют функтору (вторая партиция).
4.3.2partition/stable_partition/partition_copy
Partitionперемещает элементы множества так, что в начале оказываются те элементы, что удовлетворяют какому-то условию.
Stable_partitionпри разбивке на партиции сохраняет порядок, в котором были элементы относительно друг друга в исходной коллекции.
4.3.3partition_point
Получает итератор на место, где одна партиция закончилась.
4.4 Сортировка
4.4.1sort/stable_sort
Сортирует набор элементов в коллекции. У элементов должен быть или оператор < быть реализован. Или должна использовать перегрузка, где функтор сравнивает фрагменты коллекции.
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
struct Person
{
string Name;
Person(const string& name) : Name(name)
{
}
};
int _tmain()
{
vector<Person> persons = {
Person("Ahmed"),
Person("Anna")};
sort(persons.begin(), persons.end(), [](const Person& a, const Person& b) { return a.Name > b.Name; });
vector<int> numbers = {22, 444};
sort(numbers.begin(), numbers.end());
return 0;
}
Stable_sortв отличие отsortсохраняет относительный порядок эквивалентных элементов.