向量与动态数组相同, 具有在插入或删除元素时自动调整自身大小的能力, 并且容器自动处理其存储。矢量元素放置在连续的存储中, 以便可以使用迭代器对其进行访问和遍历。在向量中, 数据插入到最后。在末尾插入会花费不同的时间, 因为有时可能需要扩展阵列。删除最后一个元素只需要固定的时间, 因为不会发生大小调整。在开始或中间插入和擦除的时间是线性的。
与向量关联的某些功能是:
迭代器
- 开始()–返回指向向量中第一个元素的迭代器
- 结束()–返回一个迭代器, 该迭代器指向向量中最后一个元素之后的理论元素
- 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 <
<
"\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
容量
- 尺寸()–返回向量中元素的数量。
- max_size()–返回向量可以容纳的最大元素数。
- 容量()–返回当前分配给向量的存储空间的大小, 以元素数表示。
- 调整大小–调整容器的大小, 使其包含" 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 <
<
"\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
元素访问:
- 参考运算符[g]–返回对向量中" g"位置元素的引用
- 于(g)–返回对向量中" g"位置元素的引用
- 面前()–返回对向量中第一个元素的引用
- 背部()–返回对向量中最后一个元素的引用
- 数据()–返回指向向量内部使用的存储阵列的直接指针, 以存储其拥有的元素。
// 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通过激烈的问题解决过程来训练和掌握这些概念。
推荐阅读
- 入侵检测系统(IDS)介绍详细指南
- 如何在PHP中实现回调(代码实例解释)
- PHP如何使用count_chars()函数(代码示例)
- C++如何使用STL中的map find()函数(示例)
- 网关负载平衡协议(GLBP)详细指南
- 算法设计(分段筛(打印范围内的素数))
- jQuery die()方法用法和介绍
- jQuery param()方法用法和介绍
- 算法(二进制字符串中具有奇数十进制值的子字符串数)