tricks of stl containers

23
Хитрости STL контейнеров Хитрости STL контейнеров Максим Лысков Минск, 2016

Upload: comaqaby

Post on 15-Apr-2017

200 views

Category:

Technology


0 download

TRANSCRIPT

Хитрости STL контейнеров

Хитрости STL контейнеров

Максим Лысков

Минск, 2016

Хитрости STL контейнеров

Знакомимся?

Максим, старший инженер-разработчик в компании EPAM Systems.

В настоящее время участвую в разработке системы иерархического хранения и репликации данных.

Хитрости STL контейнеров

Хитрости STL контейнеров

Контейнер - последовательность

однотипных элементов.

Хитрости STL контейнеров

Типы контейнеров:● последовательные● ассоциативные● адаптеры контейнеров● “почти” контейнеры

Хитрости STL контейнеров

Последовательные контейнеры● template<class T, class Allocator = std::allocator<T>>

class vector;● template<class T, class Allocator = std::allocator<T>>

class list;● template<class T, class Allocator = std::allocator<T>>

class forward_list;● template<class T, class Allocator = std::allocator<T>>

class deque;

Хитрости STL контейнеров

Упорядоченые ассоциативные контейнеры● template<class Key, class Compare, class Allocator> class set;● template<class Key, class Compare, class Allocator> class

multi_set;● template<class Key, class T, class Compare, class Allocator>

class map;● template<class Key, class T, class Compare, class Allocator>

class multi_map;

Хитрости STL контейнеров

Неупорядоченые ассоциативные контейнеры● template<class Key, class Hash, class KeyEqual, class Allocator>

class unordered_set;● template<class Key, class Compare, class Allocator> class

unordered_multiset;● template<class Key, class T, class Hash, class KeyEqual,

class Allocator> class unordered_map;● template<class Key, class T, class Hash, class KeyEqual,

class Allocator> class unordered_multimap;

Хитрости STL контейнеров

Адаптеры контейнеров● template<class T, class Container> class stack;● template<class T, class Container> class queue;● template<class T, class Container, class Compare>

class priority_queue;

Хитрости STL контейнеров

Почти контейнеры● template<class T, std::size_t N> struct array;● T[N]● template<class C, class Traits, class Allocator> class

basic_string;● string, wstring, u16string, u32string● vector<bool>● template<std::size_t N> bitset;

Хитрости STL контейнеров

Типы внутри контейнера:● value_type● allocator_type● size_type● reference● pointer● ...

Хитрости STL контейнеров

Новое в операциях● конструирование из initializer_list● разница между vector<T>(n) и vector<T>{n} ● cbegin / cend● data● emplace / emplace_back / emplace_front● swap● shrink_to_fit

Хитрости STL контейнеров

Новое в операциях● movable constructors● move в push_*

Хитрости STL контейнеров

Сложность операций[] list front back

vector O(1) O(n)+ O(1)+

list O(1) O(1) O(1)

forward_list O(1) O(1)

deque O(1) O(n)+ O(1) O(1)

Хитрости STL контейнеров

Сложность операций[] list front back

map O(log(n)) O(log(n))

set O(log(n))

unordered_set O(1)

unordered_map O(1) O(1)

Хитрости STL контейнеров

Итераторы

Хитрости STL контейнеров

Классификация итераторов

Хитрости STL контейнеров

Новое в итераторах● begin/end● cbegin/cend● next/prev● move_iterator● make_move_iterator

Хитрости STL контейнеров

Алгоритмы - функции над последовательностями элементов.

Хитрости STL контейнеров

remove, remove_if, uniqueне изменяют размер последовательностиnew_end = remove_if(c.begin(), c.end(), pred);c.erase(new_end, c.end());

Хитрости STL контейнеров

Советы● не полагаться на оценки - измерять● выбирать контейнер исходя из операций● для ассоциативных - unordered_*, если не нужен порядок● по умолчанию использовать вектор ● …● PROFIT!

Хитрости STL контейнеров

?

Хитрости STL контейнеров

Спасибо!