110 lines
3.0 KiB
Org Mode
110 lines
3.0 KiB
Org Mode
#+title: C++ Containers
|
|
|
|
* Container Concept: Common Interface :containers:concept:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504002
|
|
:END:
|
|
** Front
|
|
What interface is shared by all C++ standard containers?
|
|
** Back
|
|
- *Element access*: ~at~, ~operator[]~, ~front~, ~back~, ~data~
|
|
- *Iterators*: ~begin~, ~end~, ~cbegin~, ~cend~, ~rbegin~, ~rend~
|
|
- *Capacity*: ~empty~, ~size~, ~max_size~
|
|
- *Modifiers*: ~clear~, ~insert~, ~erase~, ~push_back~, ~pop_back~, ~resize~, ~swap~
|
|
|
|
* Do C++ containers inherit from a common base? :containers:concept:inheritance:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504003
|
|
:END:
|
|
** Front
|
|
Do C++ containers (vector, list, map, etc.) inherit from a common base class?
|
|
** Back
|
|
No. Standard containers are standalone classes. Shared interfaces come from conventions and C++20 concepts (~Container~, ~SequenceContainer~), not inheritance.
|
|
|
|
* Sequence Containers :containers:sequence:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504004
|
|
:END:
|
|
** Front
|
|
What are the C++ sequence containers?
|
|
** Back
|
|
~vector~, ~deque~, ~list~, ~forward_list~, ~array~
|
|
|
|
Sequence containers maintain insertion order.
|
|
|
|
* Associative Containers :containers:associative:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504005
|
|
:END:
|
|
** Front
|
|
What are the C++ associative containers?
|
|
** Back
|
|
- *Ordered*: ~set~, ~multiset~, ~map~, ~multimap~
|
|
- *Unordered*: ~unordered_set~, ~unordered_multiset~, ~unordered_map~, ~unordered_multimap~
|
|
|
|
* Container Adapters :containers:adapter:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_ID: 1777826871054
|
|
:END:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504006
|
|
** Front
|
|
What are the C++ container adapters?
|
|
** Back
|
|
~stack~, ~queue~, ~priority_queue~
|
|
|
|
Adapters provide a restricted interface (e.g., LIFO for stack, FIFO for queue).
|
|
|
|
* What does vector have that other containers don't? :containers:vector:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504007
|
|
:END:
|
|
** Front
|
|
Which methods does ~vector~ have that other containers typically don't?
|
|
** Back
|
|
~reserve~, ~capacity~, ~shrink_to_fit~
|
|
|
|
These manage the internal memory buffer.
|
|
|
|
* Unique methods on sequence containers (list, deque) :containers:sequence:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504008
|
|
:END:
|
|
** Front
|
|
Which sequence containers support ~push_front~ and ~pop_front~?
|
|
** Back
|
|
~deque~ and ~list~ (not ~vector~)
|
|
|
|
These containers support insertion/removal at both ends.
|
|
|
|
* Unique methods on associative containers :containers:associative:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504009
|
|
:END:
|
|
** Front
|
|
What tree-based methods do ordered associative containers have?
|
|
** Back
|
|
~find~, ~count~, ~lower_bound~, ~upper_bound~, ~equal_range~
|
|
|
|
These use tree traversal (BST behind the scenes).
|
|
|
|
* Unique methods on unordered containers :containers:unordered:
|
|
:PROPERTIES:
|
|
:ANKI_NOTE_TYPE: Basic
|
|
:ANKI_NOTE_ID: 20260504010
|
|
:END:
|
|
** Front
|
|
What hash-specific methods do unordered containers have?
|
|
** Back
|
|
~bucket_count~, ~load_factor~, ~max_load_factor~, ~rehash~, ~reserve~
|
|
|
|
These manage hash table internals.
|