向量与动态数组相同,能够在插入或删除元素时自动调整自身大小,其存储由容器自动处理。向量元素被放置在连续的存储器中,以便可以使用迭代器访问和遍历它们。在向量中,数据插入到末尾。在末尾插入需要不同的时间,因为有时可能需要扩展阵列。删除最后一个元素只需要固定的时间,因为不会调整大小。在开始或中间插入和擦除在时间上是线性的。
null
与向量相关的某些函数包括: 遍历器
- 开始 –返回指向向量中第一个元素的迭代器
- 结束() –返回一个迭代器,该迭代器指向向量中最后一个元素后面的理论元素
- rbegin() –返回指向向量中最后一个元素的反向迭代器(反向开始)。它从最后一个元素移动到第一个元素
- rend() –返回一个反向迭代器,该迭代器指向向量中第一个元素之前的理论元素(视为反向结束)
- cbegin() –返回指向向量中第一个元素的常量迭代器。
- cend() –返回一个常量迭代器,该迭代器指向向量中最后一个元素后面的理论元素。
- crbegin() –返回指向向量中最后一个元素的常量反向迭代器(反向开始)。它从最后一个元素移动到第一个元素
- crend() –返回一个常量反向迭代器,指向向量中第一个元素之前的理论元素(视为反向结束)
// C++ program to illustrate the // iterators in vector #include <iostream> #include <vector> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 5; i++) g1.push_back(i); cout << "Output of begin and end: " ; for ( auto i = g1.begin(); i != g1.end(); ++i) cout << *i << " " ; cout << "Output of cbegin and cend: " ; for ( auto i = g1.cbegin(); i != g1.cend(); ++i) cout << *i << " " ; cout << "Output of rbegin and rend: " ; for ( auto ir = g1.rbegin(); ir != g1.rend(); ++ir) cout << *ir << " " ; cout << "Output of crbegin and crend : " ; for ( auto ir = g1.crbegin(); ir != g1.crend(); ++ir) cout << *ir << " " ; return 0; } |
输出:
Output of begin and end: 1 2 3 4 5 Output of cbegin and cend: 1 2 3 4 5 Output of rbegin and rend: 5 4 3 2 1 Output of crbegin and crend : 5 4 3 2 1
容量
- 大小() –返回向量中的元素数。
- 最大尺寸() –返回向量可以容纳的最大元素数。
- 容量() –返回当前分配给向量的存储空间大小,以元素数表示。
- 调整大小(n) –调整容器大小,使其包含“n”个元素。
- 空的() –返回容器是否为空。
- 收缩到合适的尺寸 –降低容器的容量以适应其大小,并破坏超出容量的所有元素。
- 储备 –要求向量容量至少足以包含n个元素。
// C++ program to illustrate the // capacity function in vector #include <iostream> #include <vector> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 5; i++) g1.push_back(i); cout << "Size : " << g1.size(); cout << "Capacity : " << g1.capacity(); cout << "Max_Size : " << g1.max_size(); // resizes the vector size to 4 g1.resize(4); // prints the vector size after resize() cout << "Size : " << g1.size(); // checks if the vector is empty or not if (g1.empty() == false ) cout << "Vector is not empty" ; else cout << "Vector is empty" ; // Shrinks the vector g1.shrink_to_fit(); cout << "Vector elements are: " ; for ( auto it = g1.begin(); it != g1.end(); it++) cout << *it << " " ; return 0; } |
输出:
Size : 5 Capacity : 8 Max_Size : 4611686018427387903 Size : 4 Vector is not empty Vector elements are: 1 2 3 4
元素访问:
- 参考运算符[g] –返回对向量中位置“g”处元素的引用
- at(g) –返回对向量中位置“g”处元素的引用
- 前() –返回对向量中第一个元素的引用
- back() –返回对向量中最后一个元素的引用
- 数据() –返回指向向量内部用于存储其所属元素的内存数组的直接指针。
// C++ program to illustrate the // element accesser in vector #include <bits/stdc++.h> using namespace std; int main() { vector< int > g1; for ( int i = 1; i <= 10; i++) g1.push_back(i * 10); cout << "Reference operator [g] : g1[2] = " << g1[2]; cout << "at : g1.at(4) = " << g1.at(4); cout << "front() : g1.front() = " << g1.front(); cout << "back() : g1.back() = " << g1.back(); // pointer to the first element int * pos = g1.data(); cout << "The first element is " << *pos; return 0; } |
输出:
Reference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10
修饰语:
- 分配() –它通过替换旧的向量元素为向量元素指定新的值
- 推回 –它将元素从后面推入向量
- 回来 –用于从背面弹出或移除向量中的元素。
- 插入() –它在指定位置的元素之前插入新元素
- 抹去 –用于从指定位置或范围内移除容器中的元件。
- 互换 –它用于将一个向量的内容与相同类型的另一个向量交换。大小可能不同。
- 清除() –用于删除向量容器的所有元素
- 安置() –它通过在位置插入新元素来扩展容器
- 安置 –用于将新元素插入向量容器,新元素添加到向量末尾
.
// C++ program to illustrate the // Modifiers in vector #include <bits/stdc++.h> #include <vector> using namespace std; int main() { // Assign vector vector< int > v; // fill the array with 10 five times v.assign(5, 10); cout << "The vector elements are: " ; for ( int i = 0; i < v.size(); i++) cout << v[i] << " " ; // inserts 15 to the last position v.push_back(15); int n = v.size(); cout << "The last element is: " << v[n - 1]; // removes last element v.pop_back(); // prints the vector cout << "The vector elements are: " ; for ( int i = 0; i < v.size(); i++) cout << v[i] << " " ; // inserts 5 at the beginning v.insert(v.begin(), 5); cout << "The first element is: " << v[0]; // removes the first element v.erase(v.begin()); cout << "The first element is: " << v[0]; // inserts at the beginning v.emplace(v.begin(), 5); cout << "The first element is: " << v[0]; // Inserts 20 at the end v.emplace_back(20); n = v.size(); cout << "The last element is: " << v[n - 1]; // erases the vector v.clear(); cout << "Vector size after erase(): " << v.size(); // two vector to perform swap vector< int > v1, v2; v1.push_back(1); v1.push_back(2); v2.push_back(3); v2.push_back(4); cout << "Vector 1: " ; for ( int i = 0; i < v1.size(); i++) cout << v1[i] << " " ; cout << "Vector 2: " ; for ( int i = 0; i < v2.size(); i++) cout << v2[i] << " " ; // Swaps v1 and v2 v1.swap(v2); cout << "After Swap Vector 1: " ; for ( int i = 0; i < v1.size(); i++) cout << v1[i] << " " ; cout << "Vector 2: " ; for ( int i = 0; i < v2.size(); i++) cout << v2[i] << " " ; } |
输出:
The vector elements are: 10 10 10 10 10 The last element is: 15 The vector elements are: 10 10 10 10 10 The first element is: 5 The first element is: 10 The first element is: 5 The last element is: 20 Vector size after erase(): 0 Vector 1: 1 2 Vector 2: 3 4 After Swap Vector 1: 3 4 Vector 2: 1 2
所有向量函数:
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END