C++ STL中的向量vector用法详细解读

向量与动态数组相同, 具有在插入或删除元素时自动调整自身大小的能力, 并且容器自动处理其存储。矢量元素放置在连续的存储中, 以便可以使用迭代器对其进行访问和遍历。在向量中, 数据插入到最后。在末尾插入会花费不同的时间, 因为有时可能需要扩展阵列。删除最后一个元素只需要固定的时间, 因为不会发生大小调整。在开始或中间插入和擦除的时间是线性的。
与向量关联的某些功能是:
迭代器

  1. 开始()–返回指向向量中第一个元素的迭代器
  2. 结束()–返回一个迭代器, 该迭代器指向向量中最后一个元素之后的理论元素
  3. rbegin()–返回指向向量中最后一个元素的反向迭代器(反向开始)。它从最后一个元素移动到第一个元素
  4. rend()–返回指向向量中第一个元素之前的理论元素的反向迭代器(视为反向端点)
  5. cbegin()–返回指向向量中第一个元素的常量迭代器。
  6. cend()–返回一个常量迭代器, 该迭代器指向向量中最后一个元素之后的理论元素。
  7. crbegin()–返回一个常数反向迭代器, 该迭代器指向向量中的最后一个元素(反向开始)。它从最后一个元素移动到第一个元素
  8. 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 < < "\nOutput of cbegin and cend: " ; for ( auto i = g1.cbegin(); i != g1.cend(); ++i) cout < < *i < < " " ; cout < < "\nOutput of rbegin and rend: " ; for ( auto ir = g1.rbegin(); ir != g1.rend(); ++ir) cout < < *ir < < " " ; cout < < "\nOutput 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

容量
  1. 尺寸()–返回向量中元素的数量。
  2. max_size()–返回向量可以容纳的最大元素数。
  3. 容量()–返回当前分配给向量的存储空间的大小, 以元素数表示。
  4. 调整大小–调整容器的大小, 使其包含" n"个元素。
  5. 空()–返回容器是否为空。
  6. 缩小到适合()–降低容器的容量以适应其尺寸, 并破坏超出容量的所有元素。
  7. 保留()–要求向量容量至少足以包含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 < < "\nCapacity : " < < g1.capacity(); cout < < "\nMax_Size : " < < g1.max_size(); // resizes the vector size to 4 g1.resize(4); // prints the vector size after resize() cout < < "\nSize : " < < g1.size(); // checks if the vector is empty or not if (g1.empty() == false ) cout < < "\nVector is not empty" ; else cout < < "\nVector is empty" ; // Shrinks the vector g1.shrink_to_fit(); cout < < "\nVector 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

元素访问:
  1. 参考运算符[g]–返回对向量中" g"位置元素的引用
  2. 于(g)–返回对向量中" g"位置元素的引用
  3. 面前()–返回对向量中第一个元素的引用
  4. 背部()–返回对向量中最后一个元素的引用
  5. 数据()–返回指向向量内部使用的存储阵列的直接指针, 以存储其拥有的元素。
// 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 < < "\nReference operator [g] : g1[2] = " < < g1[2]; cout < < "\nat : g1.at(4) = " < < g1.at(4); cout < < "\nfront() : g1.front() = " < < g1.front(); cout < < "\nback() : g1.back() = " < < g1.back(); // pointer to the first element int * pos = g1.data(); cout < < "\nThe 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

修饰符:
Assign()–通过替换旧元素为向量元素分配新值
push_back()–将元素从背面推入向量
pop_back()–用于从背面弹出或弹出矢量中的元素。
insert()–在指定位置的元素之前插入新元素
delete()–用于从指定位置或范围中删除容器中的元素。
swap()–用于将一个向量的内容与另一个相同类型的向量交换。大小可能会有所不同。
【C++ STL中的向量vector用法详细解读】clear()–用于删除向量容器的所有元素
emplace()–通过在位置插入新元素来扩展容器
emplace_back()–用于将一个新元素插入向量容器, 该新元素被添加到向量的末尾
.
// 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 < < "\nThe last element is: " < < v[n - 1]; // removes last element v.pop_back(); // prints the vector cout < < "\nThe 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 < < "\nThe first element is: " < < v[0]; // removes the first element v.erase(v.begin()); cout < < "\nThe first element is: " < < v[0]; // inserts at the beginning v.emplace(v.begin(), 5); cout < < "\nThe first element is: " < < v[0]; // Inserts 20 at the end v.emplace_back(20); n = v.size(); cout < < "\nThe last element is: " < < v[n - 1]; // erases the vector v.clear(); cout < < "\nVector 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 < < "\n\nVector 1: " ; for ( int i = 0; i < v1.size(); i++) cout < < v1[i] < < " " ; cout < < "\nVector 2: " ; for ( int i = 0; i < v2.size(); i++) cout < < v2[i] < < " " ; // Swaps v1 and v2 v1.swap(v2); cout < < "\nAfter Swap \nVector 1: " ; for ( int i = 0; i < v1.size(); i++) cout < < v1[i] < < " " ; cout < < "\nVector 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(): 0Vector 1: 1 2 Vector 2: 3 4 After Swap Vector 1: 3 4 Vector 2: 1 2

所有向量功能:
  • vector::begin()和vector :: end()
  • vector::rbegin()和rend()
  • vector :: cbegin()和vector :: cend()
  • vector :: crend()和vector :: crbegin()
  • vector:: assign()
  • vector:: at()
  • vector:: back()
  • vector::capacity()
  • vector:: clear()
  • vector:: push_back()
  • vector::pop_back()
  • vector::empty()
  • vector::erase()
  • vector::size()
  • vector:: swap()
  • vector::reserve()
  • vector::resize()
  • vector::shrink_to_fit()
  • vector::operator =
  • vector::operator []
  • vector::front()
  • vector::data()
  • vector:: emplace_back()
  • vector:: emplace()
  • vector::max_size()
  • vector:: insert()
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C ++ STL通过激烈的问题解决过程来训练和掌握这些概念。

    推荐阅读