Coming Soon
This lesson is currently being developed
Introduction to vectors
Overview of vector and container concepts you'll master in this chapter.
What to Expect
Comprehensive explanations with practical examples
Interactive coding exercises to practice concepts
Knowledge quiz to test your understanding
Step-by-step guidance for beginners
Development Status
Content is being carefully crafted to provide the best learning experience
Preview
Early Preview Content
This content is still being developed and may change before publication.
Vectors - Terminology Reference
This lesson provides a comprehensive reference of all the key vector terminology you'll encounter throughout this chapter. Think of it as your dynamic arrays vocabulary guide - these are the essential terms every C++ programmer needs to know when working with std::vector, the most important container in modern C++ programming.
Complete Terminology Guide
Container Fundamentals
| Term | Definition | Example | Purpose |
|---|---|---|---|
| Container | Object that holds a collection of other objects | std::vector, std::array | Data organization |
| Dynamic array | Array that can change size during program execution | std::vector | Flexible storage |
| Static array | Fixed-size array that cannot change size after creation | C-style arrays, std::array | Fixed storage |
| Collection | General term for objects that hold multiple values | Various container types | Data grouping |
| Element | Individual item stored in a container | One value in vector | Container contents |
| Container class | C++ class designed to hold collections of objects | std::vector template class | Object-oriented storage |
std::vector Basics
| Term | Definition | Syntax | Header Required |
|---|---|---|---|
| std::vector | Dynamic array container from C++ standard library | std::vector<int> numbers; |
<vector> |
| Vector declaration | Creating a vector variable | std::vector<Type> name; |
Template syntax |
| Vector instantiation | Creating actual vector object with specific type | std::vector<int> v; |
Type specification |
| Template parameter | Type specified in angle brackets | int in std::vector<int> |
Generic programming |
| Element type | Type of objects stored in the vector | int, double, string, etc. | Homogeneous storage |
Vector Initialization
| Term | Definition | Syntax | C++ Version |
|---|---|---|---|
| Default initialization | Creating empty vector | std::vector<int> v; |
All versions |
| List initialization | Initializing with specific values | std::vector<int> v{1, 2, 3}; |
C++11+ |
| Fill initialization | Creating vector with repeated values | std::vector<int> v(5, 10); |
All versions |
| Copy initialization | Creating vector from another vector | std::vector<int> v2{v1}; |
All versions |
| Range initialization | Creating vector from iterator range | Advanced concept | All versions |
| Initializer list | Values enclosed in braces for initialization | {1, 2, 3, 4, 5} |
C++11+ |
Size and Capacity
| Term | Definition | Method | Usage |
|---|---|---|---|
| Size | Number of elements currently stored in vector | v.size() |
Current element count |
| Capacity | Number of elements vector can hold without reallocating memory | v.capacity() |
Memory allocation info |
| Empty | Whether vector contains zero elements | v.empty() |
Checking for elements |
| Max size | Maximum number of elements vector can theoretically hold | v.max_size() |
System limitations |
| Reserve | Pre-allocate memory for specified number of elements | v.reserve(100) |
Performance optimization |
| Resize | Change the actual size of vector | v.resize(10) |
Size modification |
| Shrink to fit | Reduce capacity to match current size | v.shrink_to_fit() |
Memory optimization |
Element Access
| Term | Definition | Syntax | Safety Level |
|---|---|---|---|
| Subscript operator | Access element by index using [] | v[0], v[i] |
No bounds checking |
| at() method | Access element by index with bounds checking | v.at(0), v.at(i) |
Safe access |
| front() | Access first element | v.front() |
Must not be empty |
| back() | Access last element | v.back() |
Must not be empty |
| data() | Get pointer to underlying array | v.data() |
Advanced usage |
| Index | Position of element in vector (starting from 0) | 0, 1, 2, ... |
Zero-based |
| Bounds checking | Verifying index is within valid range | Built into at() method | Safety feature |
Size Type Issues
| Term | Definition | Type | Problem Area |
|---|---|---|---|
| size_type | Unsigned integer type returned by size() and capacity() | std::vector<T>::size_type |
Proper type for sizes |
| Signed/unsigned comparison | Mixing signed and unsigned integers in comparisons | int i < v.size() |
Common source of warnings |
| Unsigned arithmetic | Arithmetic on unsigned numbers can cause underflow | v.size() - 1 when size is 0 |
Dangerous subtraction |
| Static cast | Explicit conversion between signed and unsigned | static_cast<int>(v.size()) |
Safe conversion |
| Integer underflow | Unsigned subtraction going below zero wraps to large value | 0u - 1u becomes large number |
Loop pitfall |
Iterators
| Term | Definition | Usage | Iterator Type |
|---|---|---|---|
| Iterator | Object that points to vector element and can traverse container | auto it = v.begin(); |
Pointer-like |
| begin() | Returns iterator to first element | v.begin() |
Start position |
| end() | Returns iterator one past the last element | v.end() |
End marker |
| Iterator arithmetic | Moving iterators forward or backward | ++it, it + 5 |
Navigation |
| Iterator dereference | Accessing value pointed to by iterator | *it |
Value access |
| Iterator validity | Whether iterator still points to valid element | Affected by vector modifications | Safety concern |
Vector Modification
| Term | Definition | Method | Performance |
|---|---|---|---|
| push_back() | Add element to end of vector | v.push_back(42) |
Amortized O(1) |
| pop_back() | Remove last element from vector | v.pop_back() |
O(1) |
| insert() | Add element at specified position | v.insert(it, value) |
O(n) |
| erase() | Remove element at specified position | v.erase(it) |
O(n) |
| clear() | Remove all elements from vector | v.clear() |
O(n) |
| assign() | Replace vector contents | v.assign(5, 10) |
O(n) |
| emplace_back() | Construct element in-place at end | v.emplace_back(args) |
More efficient |
Memory Management
| Term | Definition | Concept | Performance Impact |
|---|---|---|---|
| Dynamic allocation | Memory allocated at runtime from heap | Automatic in std::vector | Flexibility |
| Reallocation | Moving vector contents to larger memory block | Happens when capacity exceeded | Expensive operation |
| Amortized complexity | Average performance over sequence of operations | push_back is amortized O(1) | Performance analysis |
| Memory fragmentation | Scattered memory allocation reducing efficiency | Minimized by vector growth | System-level issue |
| RAII | Resource Acquisition Is Initialization - automatic cleanup | Vector handles its own memory | Memory safety |
Vector Algorithms
| Term | Definition | Usage | Header Required |
|---|---|---|---|
| std::sort() | Sort vector elements | std::sort(v.begin(), v.end()) |
<algorithm> |
| std::find() | Search for element in vector | std::find(v.begin(), v.end(), x) |
<algorithm> |
| std::reverse() | Reverse order of elements | std::reverse(v.begin(), v.end()) |
<algorithm> |
| Range-based algorithms | Algorithms that work on iterator ranges | Most STL algorithms | Modern approach |
| Predicate | Function that returns true/false for algorithm filtering | Used with find_if, count_if | Conditional logic |
Loop Patterns
| Term | Definition | Syntax | Best Practice |
|---|---|---|---|
| Index-based loop | Traditional for loop using indices | for(size_t i = 0; i < v.size(); ++i) |
When index needed |
| Iterator loop | Loop using iterators | for(auto it = v.begin(); it != v.end(); ++it) |
Generic approach |
| Range-based for | Modern loop syntax | for(const auto& elem : v) |
Preferred method |
| Reverse iteration | Looping backwards through vector | Using reverse iterators or signed index | Special cases |
Range-Based For Loops
| Term | Definition | Syntax | C++ Version |
|---|---|---|---|
| Range-based for | Simplified loop syntax for containers | for(auto x : container) |
C++11+ |
| auto keyword | Automatic type deduction | auto deduces element type |
C++11+ |
| const reference | Read-only access to elements | for(const auto& x : v) |
Prevents copying |
| Reference | Modifiable access to elements | for(auto& x : v) |
Allows modification |
| Copy semantics | What happens when no reference used | for(auto x : v) copies elements |
Can be expensive |
Vector Performance
| Term | Definition | Impact | Optimization |
|---|---|---|---|
| Cache locality | Elements stored contiguously in memory | Fast sequential access | Hardware benefit |
| Random access | Constant-time access to any element | O(1) element access | Algorithm advantage |
| Insertion complexity | Performance cost of adding elements | O(1) at end, O(n) in middle | Position matters |
| Memory overhead | Extra memory used beyond element storage | Minimal for std::vector | Efficient design |
Common Pitfalls
| Term | Definition | Problem | Solution |
|---|---|---|---|
| Iterator invalidation | Iterators becoming invalid after vector modification | Crashes or undefined behavior | Refresh iterators |
| Bounds checking | Accessing elements outside valid range | [] doesn't check bounds | Use at() or verify bounds |
| Size-1 underflow | Subtracting from size when it could be zero | Unsigned underflow | Check size first |
| Uninitialized access | Using elements that haven't been set | Garbage values | Initialize properly |
| Reference invalidation | References becoming invalid after reallocation | Dangling references | Avoid long-lived references |
Vector vs Array Comparison
| Aspect | std::vector | C-style Array | std::array |
|---|---|---|---|
| Size | Dynamic, changeable | Fixed at compile time | Fixed at compile time |
| Memory | Heap allocation | Stack allocation | Stack allocation |
| Performance | Slight overhead | Minimal overhead | Minimal overhead |
| Safety | Bounds checking with at() | No bounds checking | Bounds checking with at() |
| Convenience | Many methods available | Basic operations only | STL container methods |
Move Semantics
| Term | Definition | Benefit | C++ Version |
|---|---|---|---|
| Move constructor | Efficiently transfer ownership of vector resources | Avoids expensive copying | C++11+ |
| Move assignment | Efficiently replace vector contents | Better performance | C++11+ |
| std::move() | Cast to rvalue reference to enable move | Forces move instead of copy | C++11+ |
| Return value optimization | Compiler optimization avoiding copies when returning vectors | Automatic performance gain | Compiler feature |
Memory Safety
| Term | Definition | Safety Mechanism | Benefit |
|---|---|---|---|
| Automatic cleanup | Vector destructor automatically frees memory | RAII principle | No memory leaks |
| Exception safety | Vector operations maintain consistency during exceptions | Strong exception guarantee | Reliable code |
| Type safety | Vector only holds objects of specified type | Template system | Prevents errors |
| Bounds safety | at() method checks array bounds | Runtime verification | Crash prevention |
Advanced Features
| Term | Definition | Usage | Complexity Level |
|---|---|---|---|
| Custom allocators | Specify how vector manages memory | Advanced memory control | Expert |
| Vector specialization | std::vector |
Bit packing optimization | Intermediate |
| Swap operation | Exchange contents of two vectors | v1.swap(v2) or std::swap |
Utility function |
| Comparison operators | Compare entire vectors for equality/ordering | ==, !=, <, etc. |
Container comparison |
How to Use This Reference
- When choosing containers - Understand when std::vector is appropriate vs other containers
- For size management - Learn the difference between size, capacity, and reserve operations
- During element access - Know when to use [], at(), front(), and back()
- For performance optimization - Understand iterator invalidation and memory reallocation
- When debugging - Recognize common pitfalls like signed/unsigned issues and bounds errors
Study Tips
• Practice size management - Understand size vs capacity and when to use reserve()
• Master safe access patterns - Learn to avoid bounds errors and iterator invalidation
• Study loop patterns - Know when to use index-based, iterator-based, and range-based loops
• Understand performance implications - Learn about amortized complexity and memory reallocation
Ready for Vectors?
Now that you have the complete vectors terminology reference, you're prepared to work with C++'s most important dynamic container effectively and safely.
Begin with "Introduction to containers and arrays" to start learning about data collections and when to use dynamic vs static storage. Use this reference whenever you encounter unfamiliar vector concepts!
Explore More Courses
Discover other available courses while this lesson is being prepared.
Browse CoursesLesson Discussion
Share your thoughts and questions