Kontenery STL
Biblioteka szablonów standardowych (STL) ISO zapewnia kontenery do przechowywania kolekcji powiązanych obiektów.Pojemniki to klasy szablonów umożliwiających specyfikację obiektów, które są dozwolone w kontenerach.
[!UWAGA]
Ten artykuł nie dotyczy STL/CLR.Aby uzyskać dodatkowe informacje, zobacz Odwołanie do biblioteki STL/CLR.
Kontenery w STL dzieli się na trzy kategorie: kontenerów sekwencji, kontenerów asocjacyjnych i kart kontenera.
Kontenery sekwencji
Kontenery sekwencji zachowują określoną kolejność wstawionych elementów.
Kontener vector zachowuje się jak tablica, ale może się automatycznie powiększać stosownie do potrzeb.Ma on dostęp swobodny i jest przechowywany w sposób ciągły, a jego długość jest bardzo elastyczna.Z tych i innych powodów vector jest preferowanym kontenerem sekwencyjnym dla większości aplikacji.Aby uzyskać dodatkowe informacje, zobacz vector — Klasa.
Kontener array ma kilka zalet kontenera vector, ale długość nie jest tak elastyczna.Aby uzyskać dodatkowe informacje, zobacz array — Klasa (STL).
Kontener deque (kolejki dwustronnej) pozwala na szybkie wstawienia i usunięcia na początku i na końcu kontenera.Współdzieli korzyści wynikające z dostępu swobodnego i elastycznej długości vector, ale nie jest ciągły.Aby uzyskać dodatkowe informacje, zobacz deque — Klasa.
Kontener list jest podwójnie połączoną listą umożliwiającą dostęp dwukierunkowy, szybkie wstawienia i szybkie usunięcia gdziekolwiek w kontenerze, ale nie można losowo uzyskać dostępu do elementu w kontenerze.Aby uzyskać dodatkowe informacje, zobacz list — Klasa.
Kontener forward_list jest pojedynczo połączoną listą — wersją kontenera list z dostępem do przodu.Aby uzyskać dodatkowe informacje, zobacz forward_list — Klasa.
Kontenery asocjacyjne
W kontenerach asocjacyjnych elementy są wstawiane w kolejności wstępnie zdefiniowanej — na przykład, jako posortowanej rosnąco.Dostępne są także nieuporządkowane kontenery asocjacyjne.Kontenery asocjacyjne można podzielić na dwa podzbiory: mapy i zestawy.
Obiekt map, czasami określany jako słownik, składa się z pary klucz/wartość.Ten klucz jest używany w celu porządkowania sekwencji, a wartość jest skojarzona z tym kluczem.Na przykład, map może zawierać klucze, które reprezentują każde unikatowe słowo w tekście i odpowiadające im wartości, które reprezentują liczbę wystąpień każdego wyrazu w tekście.Nieuporządkowana wersja map to unordered_map.Aby uzyskać więcej informacji, zobacz map — Klasa i unordered_map — Klasa.
set jest tylko uporządkowany rosnąco kontenerem unikatowych elementów — wartość jest także kluczem.Nieuporządkowana wersja obiektu set to unordered_set.Aby uzyskać więcej informacji, zobacz set — Klasa i unordered_set — Klasa.
Oba obiekty map i set zezwalają na wstawienie tylko jednego wystąpienia klucza lub elementu do kontenera.Jeśli jest wymagane wiele instancji elementów, użyj multimap lub multiset.Nieuporządkowane wersje to unordered_multimap i unordered_multiset.Aby uzyskać więcej informacji, zobacz multimap — Klasa, unordered_multimap — Klasa, multiset — Klasa, i unordered_multiset — Klasa.
Uporządkowane mapy i zestawy obsługują iteratory dwukierunkowe, natomiast ich nieuporządkowane odpowiedniki obsługują iteratory postępujące.Aby uzyskać dodatkowe informacje, zobacz Iteratory.
Karty kontenera
Adapter kontenera jest odmianą sekwencji lub asocjacyjnego kontenera, który ogranicza interfejs dla prostoty i jasności.Karty kontenera nie obsługują iteratorów.
Kontener queue używa semantyki FIFO (pierwszy na wejściu, pierwszy na wyjściu).Pierwszy element wypchnięty — czyli wstawiony do kolejki — jest pierwszym, który zostanie zabrany — to znaczy usunięty z kolejki.Aby uzyskać dodatkowe informacje, zobacz queue — Klasa.
Kontener priority_queue jest zorganizowany tak, że element, który ma najwyższą wartość, zawsze jest pierwszy w kolejce.Aby uzyskać dodatkowe informacje, zobacz priority_queue — Klasa.
Kontener stack używa semantyki LIFO (ostatni na wejściu, pierwszy na wyjściu).Ostatni element wypchnięty na stos jest pierwszym elementem zdjętym.Aby uzyskać dodatkowe informacje, zobacz stack — Klasa.
Ponieważ adaptery kontenera nie obsługują iteratorów, nie można używać ich z algorytmami STL.Aby uzyskać dodatkowe informacje, zobacz Algorytmy.
Wymagania dotyczące elementów kontenera
Ogólnie rzecz biorąc, elementy wstawione w pojemniku STL mogą być praktycznie dowolnego typu obiektu, jeśli są one do kopiowania.Elementy wyłącznie ruchome — na przykład takie, jak vector<unique_ptr<T>>, tworzone za pomocą unique_ptr<>, będą działały, dopóki nie wywołasz funkcji członka, która spróbuje je skopiować.
Destruktor nie może wygenerować wyjątku.
Uporządkowane kontenery asocjacyjne — opisane wcześniej w tym artykule — muszą mieć zdefiniowany publiczny operator porównania. (Domyślnie operatorem jest operator<, ale nawet typy, które nie współpracują z elementem operator<, są obsługiwane.
Niektóre operacje na kontenerach również mogą wymagać publicznego konstruktora domyślnego i publicznego operatora równoważności.Na przykład, nieuporządkowane kontenery asocjacyjne wymagają obsługi równości i mieszania.
Dostęp do elementów kontenera
Dostęp do elementów kontenerów uzyskuje się przy użyciu iteratorów.Aby uzyskać dodatkowe informacje, zobacz Iteratory.
[!UWAGA]
Możesz również użyć opartego na zasięgu dla pętli w celu iteracyjnego przeglądania kolekcji STL.
Zobacz też
Informacje
Standardowa biblioteka szablonów
Bezpieczeństwo wątku w standardowej bibliotece C++