vector容器介绍
功能与数组类似,可以形成一个自定义序列。
区别:
数组是静态的长度不可更改,而vector可以动态扩展,增加长度。
数组的内存通常存储在栈上,而vector的内存存放在堆上。
拓展 动态扩展不是在原空间后增加新空间,而是找一个更大的空间,拷贝数据,释放元空间
使用说明:
要在C++中使用 vector
,首先需要包含 <vector>
头文件:
#include <vector>
可以通过多种方式来创建和初始化 vector
:
1. 创建空的 vector
:
std::vector<int> vec;
2. 创建并初始化为特定大小:
std::vector<int> vec(5); // 创建包含5个元素的vector,初始值为0
3. 初始化为特定值:
std::vector<int> vec = {1, 2, 3, 4, 5};
4.vector的构造函数(在定义时直接初始化时运用)
vector<T> v;//使用模版类,默认的构造函数
vector<v.begain(),v.end()>;//将[v.begain(),v.end()]区间的元素拷贝给本身
vector<n,elem>;//将n个elem拷贝给本身
vector(const vector &v)//拷贝构造函数
**实例 **
void text(){
vector<int> v1;//默认调用模版
for(int i=0;i<5;i++)v1.push_back(i);//在v1末尾添加i
vector<int> v2(v1.begin(),v1.end());//调用项2来声明 //0 1 2 3 4
vector<int> v3(5,5);//调用3,拷贝5个5进入vector容器中 //5 5 5 5 5
vector<int> v4(v3)//调用项4,运用拷贝函数 //5 5 5 5 5
}
vector的赋值操作(定义好后再进行的赋值操作)
1.vector& operator= (const vector &v);
//重载赋值运算符
2.assign(v.begin,v.end());
//[v.begain(),v.end()]区间的元素拷贝给本身
6.assign(n,elem);
//将n个elem赋值个容器
实例
void text2{
vector<int> v1,v2;
for(int i=0;i<5;i++)v1.push_back(i);
v2=v1;//调用1,赋值运算符 //0 1 2 3 4
vector<int> v3,v4;
v3.assign(v1.begin(),v1.end());//调用2 // 0 1 2 3 4
v4.assign(5,9); //调用3 // 9 9 9 9 9
}
vector容量与大小
函数方法
1.empty()
:判断容器是否为空,是返回1,否返回0;
2.capacity();
:返回容器容量;
3.size();
返回容器大小,即容器中元素的个数
4.resize(int num[,int elem]);
重新指定容器的长度,若容器变长则默认填写0,有elem参数,填elem。若容器变短,则超出部分自动删去
void text3{
vector<int>v1;
if(v1.empty()){//判断容器是否为空
for(int i=0;i<5;i++)v1.push_back(i);
}
cout<<v1.capacity()<<endl;//调用2项,返回容器的长度;
cout<<v1.size()<<endl;//调用3项,返回容器的大小;
v1.resize(10);//增加长度,超出默认为0;//0 1 2 3 4 0 0 0 0 0
v1.resize(15,9);//增加长度,超出部分赋值9;//0 1 2 3 4 0 0 0 0 0 9 9 9 9 9
v1.resize(10);//缩短长度//0 1 2 3 4 0 0 0 0 0
v1.resize(5,9);//长度缩小时与elem无关//0 1 2 3 4
}
常见操作
添加元素
使用 push_back
方法可以向 vector
尾部添加元素:
vec.push_back(6); // 添加元素6到vector的末尾
使用 insert(const_iterator pos[,int count],ele)
方法可以向 vector
的pos位置插入count个(默认为1个)ele元素:
vec.insert(v1.begin(),20);//在vector的首位置插入一个20
vec.insert(v1.begin(),5,20);//在vector的首位置插入五个20
访问元素
可以使用下标操作符 []
或者 at()
方法访问 vector
中的元素:
int x = vec[2]; // 访问第3个元素(索引为2)
int y = vec.at(0); // 访问第1个元素
使用 front()
返回容器中的第一个元素
cout<<vec.front();//输出容器内第一个元素
使用 back()
返回容器中的最后一个元素
count<<vec.back();//输出容器中最后一个元素
删除元素
使用 pop_back
方法可以删除 vector
的最后一个元素:
vec.pop_back(); // 删除最后一个元素
使用 erase(const_iterator pos)
方法可以删除 vector
的pos位置的元素:
vec.erase(v1.begin());//删除首个元素
使用 erase(const_iterator begin,const_iterator end);
方法可以删除 vector
中begin和end之间的元素:
vec.erase(v1.begin(),v2.end());//删除开始到尾的元素,即删去所有元素
使用 clear
方法可以删除 vector
的所有元素:
vec.clear();//删除所有元素
容器互换
使用swep(v);
//容器v如当前容器互换。
void text4{
vector<int> v1,v2;
for(int i=0,i<5;i++){
v1.push_back(i);v2.push_back(4-i);
}
v1.swep(v2);//两个容器交换//v1:4 3 2 1 0 //v2:0 1 2 3 4
}
实际作用:收缩内存,减少容量
resize()可以缩小容器大小,不能减少容量;
vector<int>(v).swep(v);//创建一个虚拟对象拷贝v内的数据,从而减少容器的容量
vector预留空间
- 作用:减少容器动态扩容的次数
reserve(int len);
//容器内预留len个元素长度,预留的位置并不初始化,不可访问
ves.reserves(10000);//给ves预留空间,后面在添加元素使就可以减少扩容次数
遍历 vector
可以使用迭代器或者范围循环来遍历 vector
中的所有元素:
// 使用迭代器
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 使用范围循环(C++11及以后版本支持)
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
结尾
这些是 vector
在C++中的一些基本用法,它提供了高效的动态数组功能,非常适合需要动态增长和访问元素的场景。