ÐиблиоÑека конÑейнеÑов
ÐиблиоÑека конÑейнеÑов ÑвлÑеÑÑÑ ÑнивеÑÑалÑной коллекÑией Ñаблонов клаÑÑов и алгоÑиÑмов, позволÑÑÑÐ¸Ñ Ð¿ÑогÑаммиÑÑам легко ÑеализовÑваÑÑ Ð¾Ð±Ñие ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , Ñакие как оÑеÑеди, ÑпиÑки и ÑÑеки. СÑÑеÑÑвÑÐµÑ ÑÑи вида конÑейнеÑов: поÑледоваÑелÑнÑе конÑейнеÑÑ, аÑÑоÑиаÑивнÑе конÑейнеÑÑ Ð¸ неÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе конÑейнеÑÑ, каждÑй из коÑоÑÑÑ Ð¿ÑедназнаÑен Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑазлиÑнÑÑ Ð½Ð°Ð±Ð¾Ñов опеÑаÑий.
ÐонÑÐµÐ¹Ð½ÐµÑ ÑпÑавлÑÐµÑ Ð²ÑделÑемой Ð´Ð»Ñ ÐµÐ³Ð¾ ÑлеменÑов памÑÑÑÑ Ð¸ пÑедоÑÑавлÑÐµÑ ÑÑнкÑии-ÑлеменÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ним, либо непоÑÑедÑÑвенно, либо ÑеÑез иÑеÑаÑоÑÑ (обÑекÑÑ, обладаÑÑие ÑÑ Ð¾Ð¶Ð¸Ð¼Ð¸ Ñ ÑказаÑелÑми ÑвойÑÑвами).
ÐолÑÑинÑÑво конÑейнеÑов обладаÑÑ Ð¿Ð¾ кÑайней меÑе неÑколÑкими обÑими ÑÑнкÑиÑми-ÑлеменÑами и обÑей ÑÑнкÑионалÑноÑÑÑÑ. ÐÑÐ±Ð¾Ñ Ð¾Ð¿ÑималÑного конÑейнеÑа Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑлÑÑÐ°Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð½Ðµ ÑолÑко Ð¾Ñ Ð¿ÑедоÑÑавлÑемой ÑÑнкÑионалÑноÑÑи, но и Ð¾Ñ ÐµÐ³Ð¾ ÑÑÑекÑивноÑÑи пÑи ÑазлиÑнÑÑ ÑабоÑÐ¸Ñ Ð½Ð°Ð³ÑÑÐ·ÐºÐ°Ñ .
[пÑавиÑÑ] ÐоÑледоваÑелÑнÑе конÑейнеÑÑ
ÐоÑледоваÑелÑнÑе конÑейнеÑÑ ÑеализÑÑÑ ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑного доÑÑÑпа к ним.
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
ÑÑаÑиÑеÑкий непÑеÑÑвнÑй маÑÑив (Ñаблон клаÑÑа) |
динамиÑеÑкий непÑеÑÑвнÑй маÑÑив (Ñаблон клаÑÑа) | |
двÑÑÑоÑоннÑÑ Ð¾ÑеÑÐµÐ´Ñ (Ñаблон клаÑÑа) | |
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
одноÑвÑзнÑй ÑпиÑок (Ñаблон клаÑÑа) |
двÑÑвÑзнÑй ÑпиÑок (Ñаблон клаÑÑа) |
[пÑавиÑÑ] ÐÑÑоÑиаÑивнÑе конÑейнеÑÑ
ÐÑÑоÑиаÑивнÑе конÑейнеÑÑ ÑеализÑÑÑ ÑпоÑÑдоÑеннÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð±ÑÑÑÑого поиÑка (Ñо ÑложноÑÑÑÑ O(log n)).
коллекÑÐ¸Ñ ÑникалÑнÑÑ
клÑÑей, оÑÑоÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ клÑÑам (Ñаблон клаÑÑа) | |
коллекÑÐ¸Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение, оÑÑоÑÑиÑованнÑÑ
по клÑÑам, клÑÑи ÑникалÑÐ½Ñ (Ñаблон клаÑÑа) | |
коллекÑÐ¸Ñ ÐºÐ»ÑÑей, оÑÑоÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ клÑÑам (Ñаблон клаÑÑа) | |
коллекÑÐ¸Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение, оÑÑоÑÑиÑованнÑÑ
по клÑÑам (Ñаблон клаÑÑа) |
[пÑавиÑÑ] ÐеÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе конÑейнеÑÑ
ÐеÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе конÑейнеÑÑ ÑеализÑÑÑ Ð½ÐµÑпоÑÑдоÑеннÑе (Ñ ÐµÑиÑованнÑе) ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð±ÑÑÑÑого поиÑка (Ñо ÑÑедней ÑложноÑÑÑÑ O(1), в Ñ ÑдÑем ÑлÑÑае O(n)).
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
коллекÑÐ¸Ñ ÑникалÑнÑÑ
клÑÑей, Ñ
ÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ клÑÑам (Ñаблон клаÑÑа) |
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
коллекÑÐ¸Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение, Ñ
ÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ клÑÑам, клÑÑи ÑникалÑÐ½Ñ (Ñаблон клаÑÑа) |
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
коллекÑÐ¸Ñ ÐºÐ»ÑÑей, Ñ
ÑÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ клÑÑам (Ñаблон клаÑÑа) |
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
коллекÑÐ¸Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение, Ñ
еÑиÑованнÑÑ
по клÑÑам (Ñаблон клаÑÑа) |
[пÑавиÑÑ] ÐдапÑеÑÑ ÐºÐ¾Ð½ÑейнеÑов
ÐдапÑеÑÑ ÐºÐ¾Ð½ÑейнеÑов пÑедоÑÑавлÑÑÑ ÑазлиÑнÑе инÑеÑÑейÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледоваÑелÑнÑÑ ÐºÐ¾Ð½ÑейнеÑов.
адапÑиÑÑÐµÑ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑека (ÑÑÑÑкÑÑÑа даннÑÑ
LIFO) (Ñаблон клаÑÑа) | |
адапÑиÑÑÐµÑ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑеÑеди (ÑÑÑÑкÑÑÑа даннÑÑ
FIFO) (Ñаблон клаÑÑа) | |
адапÑиÑÑÐµÑ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑеÑеди Ñ Ð¿ÑиоÑиÑеÑами (Ñаблон клаÑÑа) |
[пÑавиÑÑ] span
span
ÑÑо не пÑинадлежаÑее владелÑÑÑ Ð¿ÑедÑÑавление непÑеÑÑвной поÑледоваÑелÑноÑÑи обÑекÑов, памÑÑÑ ÐºÐ¾ÑоÑÑÑ
пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ð´ÑÑÐ³Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ.
(C++20) |
не владеÑÑее пÑедÑÑавление непÑеÑÑвной поÑледоваÑелÑноÑÑи обÑекÑов (Ñаблон клаÑÑа) |
[пÑавиÑÑ] ÐедейÑÑвиÑелÑнÑе иÑеÑаÑоÑÑ
ÐеÑÐ¾Ð´Ñ ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не делаÑÑ Ð¸ÑеÑаÑоÑÑ Ð¸Ð»Ð¸ ÑÑÑлки недейÑÑвиÑелÑнÑми. ÐеÑодÑ, коÑоÑÑе изменÑÑÑ ÑодеÑжимое конÑейнеÑа, могÑÑ ÑделаÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑми иÑеÑаÑоÑÑ Ð¸/или ÑÑÑлки, как показано в ÑÑой ÑаблиÑе.
ÐаÑегоÑÐ¸Ñ | ÐонÑÐµÐ¹Ð½ÐµÑ | ÐоÑле вÑÑавки... | ÐоÑле ÑÑиÑаниÑ... | УÑловие | ||
---|---|---|---|---|---|---|
иÑеÑаÑоÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑ? | ÑÑÑлки дейÑÑвиÑелÑнÑ? | иÑеÑаÑоÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑ? | ÑÑÑлки дейÑÑвиÑелÑнÑ? | |||
ÐоÑледоваÑелÑнÑе конÑейнеÑÑ | array | Ð/Ð | Ð/Ð | |||
vector | ÐÐµÑ | Ð/Ð | ÐÑÑавка изменÑÐµÑ ÑмкоÑÑÑ | |||
Ðа | Ðа | ÐеÑед изменÑннÑм ÑлеменÑом(ами) (Ð´Ð»Ñ Ð²ÑÑавки ÑолÑко еÑли ÑмкоÑÑÑ Ð½Ðµ изменилаÑÑ) | ||||
ÐÐµÑ | ÐÐµÑ | Рили поÑле изменÑнного ÑлеменÑа(ов) | ||||
deque | ÐÐµÑ | Ðа | Ðа, кÑоме ÑÑÑÑÑого ÑлеменÑа(ов) | ÐзменÑн пеÑвÑй или поÑледний ÑÐ»ÐµÐ¼ÐµÐ½Ñ | ||
ÐÐµÑ | ÐÐµÑ | Ðзменение ÑолÑко в ÑеÑедине | ||||
list | Ðа | Ðа, кÑоме ÑÑÑÑÑого ÑлеменÑа(ов) | ||||
forward_list | Ðа | Ðа, кÑоме ÑÑÑÑÑого ÑлеменÑа(ов) | ||||
ÐÑÑоÑиаÑивнÑе конÑейнеÑÑ | set multiset map multimap
|
Ðа | Ðа, кÑоме ÑÑÑÑÑого ÑлеменÑа(ов) | |||
ÐеÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе конÑейнеÑÑ | unordered_set unordered_multiset unordered_map unordered_multimap |
ÐÐµÑ | Ðа | Ð/Ð | ÐÑÑавка вÑзÑÐ²Ð°ÐµÑ Ð¿ÐµÑÐµÑ ÑÑиÑование | |
Ðа | Ðа, кÑоме ÑÑÑÑÑого ÑлеменÑа(ов) | ÐеÑÐµÑ ÑÑиÑование не пÑоиÑÑ Ð¾Ð´Ð¸Ñ |
ÐдеÑÑ Ð²ÑÑавка оÑноÑиÑÑÑ Ðº лÑÐ±Ð¾Ð¼Ñ Ð¼ÐµÑодÑ, коÑоÑÑй добавлÑÐµÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑлеменÑов в конÑейнеÑ, а ÑÑиÑание оÑноÑиÑÑÑ Ðº лÑÐ±Ð¾Ð¼Ñ Ð¼ÐµÑодÑ, коÑоÑÑй ÑдалÑÐµÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑлеменÑов из конÑейнеÑа.
- ÐÑимеÑÑ Ð¼ÐµÑодов вÑÑавки: std::set::insert, std::map::emplace, std::vector::push_back и std::deque::push_front.
- ÐбÑаÑиÑе внимание, ÑÑо std::unordered_map::operator[] Ñакже оÑноÑиÑÑÑ Ðº ним, поÑколÑÐºÑ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑавиÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² map.
- ÐÑимеÑÑ Ð¼ÐµÑодов ÑÑиÑаниÑ: std::set::erase, std::vector::pop_back, std::deque::pop_front и std::map::clear.
-
clear
Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑми вÑе иÑеÑаÑоÑÑ Ð¸ ÑÑÑлки. ÐоÑколÑÐºÑ Ð¾Ð½ ÑÑиÑÐ°ÐµÑ Ð²Ñе ÑлеменÑÑ, он ÑÐµÑ Ð½Ð¸ÑеÑки ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑиведÑннÑм вÑÑе пÑавилам.
-
ÐÑобого ÑÐ¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð·Ð°ÑлÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð½ÐµÑнÑй иÑеÑаÑоÑ. РобÑем, ÑÑÐ¾Ñ Ð¸ÑеÑаÑÐ¾Ñ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелен, как еÑли Ð±Ñ Ð¾Ð½ бÑл обÑÑнÑм иÑеÑаÑоÑом Ð´Ð»Ñ Ð½ÐµÑÑÑÑÑого ÑлеменÑа. Таким обÑазом, std::set::end никогда не ÑÑановиÑÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑм, std::unordered_set::end ÑÑановиÑÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑм ÑолÑко пÑи повÑоÑном Ñ ÐµÑиÑовании, std::vector::end вÑегда недейÑÑвиÑелен (поÑколÑÐºÑ Ð¾Ð½ вÑегда Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð¿Ð¾Ñле изменÑннÑÑ ÑлеменÑов) и Ñак далее.
ÐÑÑÑ Ð¾Ð´Ð½Ð¾ иÑклÑÑение: ÑÑиÑание, коÑоÑое ÑдалÑÐµÑ Ð¿Ð¾Ñледний ÑÐ»ÐµÐ¼ÐµÐ½Ñ std::deque Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑм конеÑнÑй иÑеÑаÑоÑ, даже еÑли ÑÑо не ÑÑÑÑÑÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÐºÐ¾Ð½ÑейнеÑа (или ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²Ð¾Ð¾Ð±Ñе). Ð ÑоÑеÑании Ñ Ð¾Ð±Ñими пÑавилами Ð´Ð»Ñ Ð¸ÑеÑаÑоÑов std::deque, конеÑнÑй ÑезÑлÑÑÐ°Ñ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо единÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑиÑ, коÑоÑÐ°Ñ Ð½Ðµ Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑм std::deque::end ÑÑо ÑÑиÑание, коÑоÑое ÑдалÑÐµÑ Ð¿ÐµÑвÑй ÑлеменÑ, но не поÑледний.
ÐезопаÑноÑÑÑ Ð¿Ð¾Ñоков
|
(наÑÐ¸Ð½Ð°Ñ Ñ C++11) |
[пÑавиÑÑ] ТаблиÑа ÑÑнкÑий-ÑлеменÑов
- ÑÑнкÑии, пÑиÑÑÑÑÑвÑÑÑие в C++03 | |
- ÑÑнкÑии, пÑиÑÑÑÑÑвÑÑÑие в C++11 | |
- ÑÑнкÑии, пÑиÑÑÑÑÑвÑÑÑие в C++17 | |
- ÑÑнкÑии, пÑиÑÑÑÑÑвÑÑÑие в C++20 |
[пÑавиÑÑ] СмоÑÑиÑе Ñакже
ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ C++ Ð´Ð»Ñ Ð¢ÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ C++: ÐонÑейнеÑ
|