В програмуванні, послідовний контейнер це ціла група мови , які реалізують логіку контейнера, що виконує функцію зберігання елементів даних. Будучи , вони можуть використовуватися для зберігання довільних елементів, як для цілих чисел так і для користувацьких класів. Спільною властивістю всіх послідовних контейнерів в тому, що доступ до елементів відбувається послідовно. Як і всі інші стандартні компоненти бібліотеки, вони знаходяться в просторі імен std.
В останньому стандарті С++ визначені наступні контейнери: array
, vector
, list
, forward_list
, deque
. Кожен з цих контейнерів реалізує різні алгоритми зберігання даних, це означає, що вони мають різну швидкодію при виконанні різних операцій:
array
реалізує масив незмінного розміру, що створюється під час компіляції.vector
реалізує масив із швидким довільним доступом і можливістю автоматичної зміни розміру при додаванні елементів.deque
реалізує двобічну чергу з порівняно швидким довільним доступом до елементів.list
реалізує двобічно зв'язаний список.forward_list
реалізує (однобічно зв'язаний список).
Оскільки кожен з контейнерів потребує можливості копіювати свої елементи для правильного функціонування, тип даних елементу має виконувати вимоги CopyConstructible і Assignable (мати конструктор копій і оператор присвоювання). У даного контейнера, всі елементи мають бути одного типу. Наприклад, не можливо одночасно зберігати дані типу char і int в одному контейнері.
Історія
Спочатку, тільки були визначені лише класи vector
, list
, deque
. До стандартизації мови C++ в 1998, вони були частиною Стандартної бібліотеки шаблонів, що була опублікована компанією SGI.
Контейнер array
вперше з’явився у декількох книжках під різними назвами. Згодом він був вбудований в в набір бібліотек Boost C++ і був запропонований в стандартну бібліотеку C++. Мотивацією додавання контейнера array
було те, що він вирішував дві проблеми масивів Cі-стилю: нестачу STL-подібного інтерфейсу і неможливість копіювати його як будь-який інший об'єкт. Він вперше з’явився в і згодом став частиною стандарту .
Контейнер forward_list
було додано до як більш просторово-ефективна альтернатива стандартному контейнеру list
для випадків, коли зворотній прохід ітератора не потрібний.
Властивості
array
, vector
і deque
- всі ці контейнери підтримують довільний доступ до елементів. list
підтримує двонаправлену ітерацію, тоді як forward_list
підтримує ітерування лише в одному напрямку.
array
не має функції додавання чи видалення елементів. vector
дозволяє швидко додавати чи видаляти елементи в кінці вектора. Будь-яке додавання чи видалення елементів не в кінці вектора потребує виконувати операцію копіювання елементів від позиції додавання елементів до кінця вектору. Ітератори над елементами, з якими відбулися такі дії стають недійсними. Насправді, будь-яке додавання має шанс порушити і зробити недійсними всі ітератори. Крім того, якщо виділене сховище пам'яті у vector
замале, для додавання нових елементів, буде виділено новий масив в пам'яті, всі елементи будуть скопійовані і перенесені у новий масив, а старий масив буде вивільнено. Контейнери deque
, list
і forward_list
підтримують операції швидкого додавання або видалення елементів, в будь-яке місце контейнеру. list
і forward_list
зберігають валідність ітераторів при таких операціях, а deque
робить їх всі недійсними.
Вектор
Елементи контейнера vector
зберігаються послідовно. Як і всі реалізації динамічних масивів, вектори дозволяють ефективно використовувати пам'ять і мають добру [en] і оптимальне використання кешу. На відміну від інших STL контейнерів, таких як двобічні черги (deque) і списки (list), вектори дозволяють вказувати початковий розмір контейнера.
Вектори дозволяють здійснювати довільний доступ; таким чином, що до елементів вектору можна доступатися таким самим чином як і до елементів масивів (по індексу в масиві).
Примітки
- (1999). C++ Standard Library - A Tutorial and Reference. Addison-Wesley.
- ISO/IEC (2003). (ISO/IEC 14882:2003(E): Programming Languages - C++) §23.1 Container requirements [lib.container.requirements] para. 4
- ISO/IEC (2003). (ISO/IEC 14882:2003(E): Programming Languages - C++) §23.2.4 Class template vector [lib.vector] para. 1
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
V programuvanni poslidovnij kontejner ce cila grupa shabloniv klasiv standartnoyi biblioteki movi C yaki realizuyut logiku kontejnera sho vikonuye funkciyu zberigannya elementiv danih Buduchi shablonami voni mozhut vikoristovuvatisya dlya zberigannya dovilnih elementiv yak dlya cilih chisel tak i dlya koristuvackih klasiv Spilnoyu vlastivistyu vsih poslidovnih kontejneriv v tomu sho dostup do elementiv vidbuvayetsya poslidovno Yak i vsi inshi standartni komponenti biblioteki voni znahodyatsya v prostori imen std V ostannomu standarti S viznacheni nastupni kontejneri array vector list forward list deque Kozhen z cih kontejneriv realizuye rizni algoritmi zberigannya danih ce oznachaye sho voni mayut riznu shvidkodiyu pri vikonanni riznih operacij array realizuye masiv nezminnogo rozmiru sho stvoryuyetsya pid chas kompilyaciyi vector realizuye masiv iz shvidkim dovilnim dostupom i mozhlivistyu avtomatichnoyi zmini rozmiru pri dodavanni elementiv deque realizuye dvobichnu chergu z porivnyano shvidkim dovilnim dostupom do elementiv list realizuye dvobichno zv yazanij spisok forward list realizuye odnobichno zv yazanij spisok Oskilki kozhen z kontejneriv potrebuye mozhlivosti kopiyuvati svoyi elementi dlya pravilnogo funkcionuvannya tip danih elementu maye vikonuvati vimogi CopyConstructible i Assignable mati konstruktor kopij i operator prisvoyuvannya U danogo kontejnera vsi elementi mayut buti odnogo tipu Napriklad ne mozhlivo odnochasno zberigati dani tipu char i int v odnomu kontejneri IstoriyaSpochatku tilki buli viznacheni lishe klasi vector list deque Do standartizaciyi movi C v 1998 voni buli chastinoyu Standartnoyi biblioteki shabloniv sho bula opublikovana kompaniyeyu SGI Kontejner array vpershe z yavivsya u dekilkoh knizhkah pid riznimi nazvami Zgodom vin buv vbudovanij v v nabir bibliotek Boost C i buv zaproponovanij v standartnu biblioteku C Motivaciyeyu dodavannya kontejnera array bulo te sho vin virishuvav dvi problemi masiviv Ci stilyu nestachu STL podibnogo interfejsu i nemozhlivist kopiyuvati jogo yak bud yakij inshij ob yekt Vin vpershe z yavivsya v i zgodom stav chastinoyu standartu C 11 Kontejner forward list bulo dodano do C 11 yak bilsh prostorovo efektivna alternativa standartnomu kontejneru list dlya vipadkiv koli zvorotnij prohid iteratora ne potribnij Vlastivostiarray vector i deque vsi ci kontejneri pidtrimuyut dovilnij dostup do elementiv list pidtrimuye dvonapravlenu iteraciyu todi yak forward list pidtrimuye iteruvannya lishe v odnomu napryamku array ne maye funkciyi dodavannya chi vidalennya elementiv vector dozvolyaye shvidko dodavati chi vidalyati elementi v kinci vektora Bud yake dodavannya chi vidalennya elementiv ne v kinci vektora potrebuye vikonuvati operaciyu kopiyuvannya elementiv vid poziciyi dodavannya elementiv do kincya vektoru Iteratori nad elementami z yakimi vidbulisya taki diyi stayut nedijsnimi Naspravdi bud yake dodavannya maye shans porushiti i zrobiti nedijsnimi vsi iteratori Krim togo yaksho vidilene shovishe pam yati u vector zamale dlya dodavannya novih elementiv bude vidileno novij masiv v pam yati vsi elementi budut skopijovani i pereneseni u novij masiv a starij masiv bude vivilneno Kontejneri deque list i forward list pidtrimuyut operaciyi shvidkogo dodavannya abo vidalennya elementiv v bud yake misce kontejneru list i forward list zberigayut validnist iteratoriv pri takih operaciyah a deque robit yih vsi nedijsnimi Vektor Elementi kontejnera vector zberigayutsya poslidovno Yak i vsi realizaciyi dinamichnih masiviv vektori dozvolyayut efektivno vikoristovuvati pam yat i mayut dobru en i optimalne vikoristannya keshu Na vidminu vid inshih STL kontejneriv takih yak dvobichni chergi deque i spiski list vektori dozvolyayut vkazuvati pochatkovij rozmir kontejnera Vektori dozvolyayut zdijsnyuvati dovilnij dostup takim chinom sho do elementiv vektoru mozhna dostupatisya takim samim chinom yak i do elementiv masiviv po indeksu v masivi Primitki 1999 C Standard Library A Tutorial and Reference Addison Wesley ISO IEC 2003 ISO IEC 14882 2003 E Programming Languages C 23 1 Container requirements lib container requirements para 4 ISO IEC 2003 ISO IEC 14882 2003 E Programming Languages C 23 2 4 Class template vector lib vector para 1