#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {5, 2, 8, 1, 9, 3};
cout << "Original vector: ";
for (int num : vec) {
cout << num << " ";
}
cout << endl;
// Sort vector
sort(vec.begin(), vec.end());
cout << "Sorted vector: ";
for (int num : vec) {
cout << num << " ";
}
cout << endl;
// Reverse vector
reverse(vec.begin(), vec.end());
cout << "Reversed vector: ";
for (int num : vec) {
cout << num << " ";
}
cout << endl;
// Find element
auto it = find(vec.begin(), vec.end(), 5);
if (it != vec.end()) {
cout << "Element 5 found at index: " << distance(vec.begin(), it) << endl;
}
// Insert element
vec.insert(vec.begin() + 2, 100);
cout << "\nAfter inserting 100 at index 2: ";
for (int num : vec) {
cout << num << " ";
}
cout << endl;
// Erase element
vec.erase(vec.begin() + 2);
cout << "After erasing element at index 2: ";
for (int num : vec) {
cout << num << " ";
}
cout << endl;
// Clear vector
vec.clear();
cout << "\nSize after clear: " << vec.size() << endl;
cout << "Is empty: " << (vec.empty() ? "Yes" : "No") << endl;
return 0;
}Output
Original vector: 5 2 8 1 9 3 Sorted vector: 1 2 3 5 8 9 Reversed vector: 9 8 5 3 2 1 Element 5 found at index: 2 After inserting 100 at index 2: 9 8 100 5 3 2 1 After erasing element at index 2: 9 8 5 3 2 1 Size after clear: 0 Is empty: Yes
This program teaches you how to perform Advanced Vector Operations in C++. Vectors support various operations like sorting, reversing, finding, inserting, and erasing elements. These operations use iterators to traverse and manipulate elements efficiently.
1. What This Program Does
The program demonstrates advanced vector operations:
- Sorting elements using sort()
- Reversing vector using reverse()
- Finding elements using find()
- Inserting elements at specific positions
- Erasing elements from vector
- Clearing entire vector
These operations enable powerful vector manipulation.
2. Header Files Used
-
#include <iostream>
- Provides cout and cin for input/output operations.
-
#include <vector>
- Provides vector container class.
-
#include <algorithm>
- Provides algorithms like sort(), reverse(), find().
3. Understanding Vector Operations
Operation Types:
- Sorting: arrange elements in order
- Reversing: reverse element order
- Finding: locate specific element
- Inserting: add element at position
- Erasing: remove element at position
- Clearing: remove all elements
Iterators:
- begin(): points to first element
- end(): points past last element
- Used for range operations
4. Sorting Vector
Using sort():
sort(vec.begin(), vec.end());
How it works:
- Sorts elements in ascending order
- Uses iterators to specify range
- Modifies original vector
- O(n log n) time complexity
Example:
{5, 2, 8, 1, 9, 3} → {1, 2, 3, 5, 8, 9}
5. Reversing Vector
Using reverse():
reverse(vec.begin(), vec.end());
How it works:
- Reverses order of elements
- First becomes last, last becomes first
- Uses iterators for range
- O(n) time complexity
Example:
{1, 2, 3, 5, 8, 9} → {9, 8, 5, 3, 2, 1}
6. Finding Elements
Using find():
auto it = find(vec.begin(), vec.end(), 5);
How it works:
- Searches for value in range
- Returns iterator to found element
- Returns end() if not found
- O(n) time complexity (linear search)
Checking Result:
if (it != vec.end()) { // Element found int index = distance(vec.begin(), it); } else { // Element not found }
7. Inserting Elements
Using insert():
vec.insert(vec.begin() + 2, 100);
How it works:
- Inserts element at specified position
- Shifts existing elements
- Expensive for large vectors (O(n))
- Position specified using iterator
Example:
Before: {9, 8, 5, 3, 2, 1} After insert at index 2: {9, 8, 100, 5, 3, 2, 1}
8. Erasing Elements
Using erase():
vec.erase(vec.begin() + 2);
How it works:
- Removes element at specified position
- Shifts remaining elements
- Expensive for large vectors (O(n))
- Position specified using iterator
Example:
Before: {9, 8, 100, 5, 3, 2, 1} After erase at index 2: {9, 8, 5, 3, 2, 1}
9. Clearing Vector
Using clear():
vec.clear();
How it works:
- Removes all elements
- Size becomes 0
- Capacity may remain (implementation dependent)
- O(n) time complexity
Checking Empty:
vec.empty() // Returns true if size is 0
10. When to Use These Operations
Best For:
- Sorting: when order matters
- Reversing: when reverse order needed
- Finding: searching for specific values
- Inserting: adding at specific positions
- Erasing: removing specific elements
- Clearing: resetting vector
Performance Considerations:
- insert()/erase(): expensive (O(n))
- Use sparingly for large vectors
- Prefer push_back()/pop_back() when possible
- Consider other containers for frequent insert/erase
11. Important Considerations
Iterators:
- begin(): first element
- end(): past last element
- Used for range operations
- Can be incremented/decremented
Performance:
- sort(): O(n log n)
- reverse(): O(n)
- find(): O(n)
- insert()/erase(): O(n)
- clear(): O(n)
Modifying Operations:
- Most operations modify original vector
- Make copies if original needed
- Be careful with iterator invalidation
12. return 0;
This ends the program successfully.
Summary
- Vector operations: sort(), reverse(), find(), insert(), erase(), clear().
- Iterators (begin(), end()) used for range operations.
- find() returns iterator, end() if not found.
- insert()/erase() can be expensive (O(n)) for large vectors.
- Understanding vector operations enables powerful data manipulation.
- Essential for algorithms, sorting, and dynamic data management.
This program is fundamental for learning advanced STL operations, understanding iterators, and preparing for complex algorithms and data manipulation in C++ programs.