文章目录
- vector数组是可以 存放任意数据类型 的 动态数组。
和普通数组类似,可以通过下标对数组中的元素进行引用。 - 使用vector数组要在 头文件中加
#include <vector>
- vectors 包含着一系列连续存储的元素,其行为和数组类似。访问 vector 中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在vector中插入元素则是线性时间复杂度。
【 1. vector 的声明与初始化 】
1.1 vector 的声明
- 声明
vector<int> vec;//声明一个存放int型的向量vec
1.2 vector 的初始化
1.2.1 构造一个空的 vector
- 基本语法
构造一个空的vector。
vecto r<DataType> myvector();
//或者
vector <DataType> myvector;
- 举例1
构造一个空的 vector myvector。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> myvector();
return 0;
}
1.2.2 指定数据的方式初始化
- 基本语法
vector <DataType> myvec = { 1, 6, 3, 4, 5 };
- 实例
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int>myvec = { 1, 2, 3, 4, 5 };
for (int j=0;j<myvec.size();++j)
cout << myvec[j]<<endl;
return 0;
}
1.2.3 指定数量初值的方式初始化 vector
- 基本语法
构造一个初始放入num个值为val的元素的vector。
vector( size_type num, const DataType &val );
- 举例1
构造一个 5 个 3 的 vector。这里 myvec.size() 返回 myvec 元素数量大小。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> myvec(5, 3);
for (int j=0;j<myvec.size();++j)
cout << myvec[j]<<endl;
return 0;
}
1.2.4 迭代器的方式初始化
- 基本语法
构造一个初始值为 [start,end) 区间元素的vector。
vector <DataType>( input_iterator start, input_iterator end );
- 举例1
将 myvec 初始化为 [地址a,地址a+3)的元素 。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
vector <int>myvec( a,a+3 );
for (int j=0;j<myvec.size();++j)
cout << myvec[j]<<endl;
return 0;
}
- 举例2
将 myvec 初始化为 [地址&a[1],地址&a[4])的元素 。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
vector<int> myvec(&a[1], &a[4]);
for (int j=0;j<myvec.size();++j)
cout << myvec[j]<<endl;
return 0;
}
1.2.5 构造一个相同的 vector
- 基本语法
构造一个与 AnthorVector 相同的vector 。
vector <DataType> ( const vector &AnthorVector);
- 举例1
构造一个与 myvec 相同的 myvec2 。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
vector<int> myvec(&a[1], &a[4]);
vector <int>myvec2(myvec);
for (int j=0;j<myvec.size();++j)
cout << myvec2[j]<<endl;
return 0;
}
【 2. vector 的相关操作 】
下面给出几个常用的操作及案例。
2.1 插入元素
2.1.1 在vector的末尾插入新元素
- 基本语法
在 myvec 的末尾添加元素newvalue。
myvec.push_back(newvalue);
- 举例1
在 myvec 的末尾添加元素1。
#include<vector>
using namespace std;
int main()
{
vector<int> myvec(5, 3);
myvec.push_back(1);
for (int j = 0; j <myvec.size(); ++j)
cout << myvec[j] << endl;
return 0;
}
2.1.2 在迭代器的前面插入新元素
- 基本语法
在 myvec 的前面添加元素newvalue。
vector<int>::iterator it;
it=vec.begin();
vec.insert(it,newvalue);
- 举例1
在 myvec 的前面添加元素1。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> myvec(5, 3);
vector<int>::iterator it;
it = myvec.begin();
myvec.insert(it, 1);
for (int j = 0; j <myvec.size(); ++j)
cout << myvec[j] << endl;
return 0;
}
2.1.3 覆盖原有的 vector
- 基本语法
在vector中加入NewNum个NewValue元素,同时清除掉以前的元素。
vec.assign(NewNum,NewValue);//现在vec中只有NewNum个NewValue
- 举例1
现在vector中只有2个1。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> myvec(5, 3);
myvec.assign(2, 1);//现在vector中只有2个1
for (int j = 0; j <myvec.size(); ++j)
cout << myvec[j] << endl;
return 0;
}
2.2 删除元素
- 基本语法
//删除最后一个元素
vec.pop_back();
//删除指定位置的元素
vec.erase(vec.begin());//删除第一个位置的元素值
//清除所有元素
vec,clear();
- 举例1
删除 myvec 的最后一个元素
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> myvec(5, 3);
myvec.pop_back();
for (int j = 0; j <myvec.size(); ++j)
cout << myvec[j] << endl;
return 0;
}
2.3 数组的方式遍历元素
- vector 支持使用数组下标的方式遍历。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v{ 1,2,3,4,5,6,7,8,9,10 }; //v被初始化成有10个元素
for (int i = 0; i < v.size(); ++i)
cout << v[i] << " "; //像普通数组一样使用vector容器
}
2.4 迭代器的方式遍历元素
- 实例
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> vec = {1, 2,3, 4 ,5};
//正向迭代器
vector <int>::iterator t;
for (t = vec.begin(); t != vec.end(); ++t)
cout << *t << " ";
cout << endl;
//反向迭代器
vector <int>::reverse_iterator t2;
t2 = vec.rbegin();
for (; t2 != vec.rend(); ++t2)
cout << *t2 << " ";
return 0;
}