vector知识点 总结
2024-04-11 13:09:43
发布于:浙江
vector
一.概念:
vector 是 C++标准库提供的变长数组类型,可以像数组一样进行数据存储和访问,但不需要指定 vector 长度,会根据需要自动扩展容量; 内部存储方式与数组相同,是一段连续的存储空间。
注:vector 类似 string,拥有很多函数,可以对 vector 进行快速操作
二. vector 使用
1.头文件:
#include <vector>
using namespace std;
2.vector 定义:
①vector<数据类型> vector名;
//定义一个 vector 变量 v ,是一个整型变长数组,(向量容器) 初始是空
vector<int> v;
//定义两个 vector 变量 ,是字符类型变长数组,相当于 string (但没有 string 强大)
vector<char> v1,v2;
②vector<数据类型> vector数组名[数组大小];
//定义一个 vector 数组 v, v[i]是一 个 vector 变量
vector<int> v[110];
3.vector初始化
①定义一个 vector 变量 v1并初始化为 v
vector<double> v1(v);
等价
vector<double> v1=v;
②定义一个 vector 变量v初始化为n个相同的常量
vector<数据类型> v(n,数据类型常量);
vector<int> v(10,1);
vector<char> v(10,'o');
vector<string>v(10,"happy");
③定义一个 vector 变量v初始化为n个元素初值为 0的常量
vector<数据类型> v(n);
//定义一个 vector 变量 v, 长度为 10 (有 10 个元素, 元素初值都为 0)
vector<int> v(10);
3.添加元素
格式:v.push_back(x) ;
功能:在 v 的尾部添加新元素 x (v 是什么类型 x就是什么类型)
4.元素引用(下标从 0 开始)
①引用方式
v[i] //下标访问 使用 v 中下标为 i 的元素
v.front() //访问首元素
v.back() //访问尾元素
②举例
cout << v.front() << " ";//输出首元素 相当于 cout<<v[0];
cout << v.back() << " ";//输出尾元素 相当于 cout<<v[v.size()-1];
5.vector基础函数
①pop_back()
格式:v.pop_back() ;
功能:删除尾元素 (多个删除可以用 erase)
v.pop_back();//删除 v 中的最后一个元素
②size()
格式:v.size() ;
功能:计算当前 v 的长度 (计算出 v 中当前有多少个元素)
int len = v.size();//计算当前 v 的长度并装到 len 中 v.size()返回值为无符号整型
③empty()
格式:v.empty() ;
功能:判断当前的 v 是否为空,如果是空返回 true,否则返回 false
if(v.empty())
cout << "empty";//如果 v 为空 输出 empty
④resize()
格式:v.resize(t) ;
功能:将 v 的长度设置为 t,不够的扩展,多的删除
v.resize(5);//将 v 的长度设置为 5
⑤clear()
格式:v.clear() ;
功能:清空 vector 变量,清除 v 中所有元素
v.clear();//清空当前 v
6.迭代器
①vector 迭代器定义
vector<数据类型>::iterator iter;
vector<int>::iterator iter;
迭代器 iter:用于指向 vector 中元素的位置 (注意:位置是地址不是下标)
②迭代器的使用
v.begin();//返回指向 v 中第一个元素的迭代器
v.end();//返回指向最后一个元素下一个位置的迭代器
iter = v.begin();//得到首元素的迭代器放到 iter 中
③使用迭代器访问元素
*iter;//访问当前 iter 指向的元素
iter = v.begin();//iter 是指向首元素 v[0]的迭代器
cout<< *iter << " " << *(iter+1) ;//相当于输出 v[0] v[1]
三.vector 拓展函数
1.插入函数
格式:v.insert(iter,val) ;
功能:在迭代器 iter 所指向的元素前面插入数字 val
此时 iter 指向的元素和后面的所有元素后移一位
v.insert(v.begin()+1,5);//在第 2 个元素 v[1]前面插入数字 5
2.删除函数
①删除一个元素
格式:v.erase(iter) ;
功能:删除 iter 所指向位置的元素
v.erase(v.begin()+1) ;//删除v[1]
②删除多个元素
格式:v.erase(iter1,iter2) ;
功能:删除[iter1,iter2)之间的所有元素,包含 iter1 指向的元素,不包含 iter2 指向的元素
v.erase(v.begin()+1,v.begin()+4+1);//删除 v[1]~v[4]之间的所有元素,后面元素前移
3.vector 排序
格式:sort(v.begin(),v.end(),cmp);//省略 cmp 默认从小到大排序
功能:对 vector 变量 v 中所有元素按照 cmp 排序规则进行排序
sort(v.begin()+3,v.begin()+9+1);//对 v[3]~v[9]按照从小到大顺序 排序
注:所有可以用下标访问的容器都可以用 sort 进行排序
4.迭代器使用 (获得相应元素位置)
v.begin()+ i,可以获 得对应元素 v[i]的位置
如:v.begin()+2 就是v[2]的位置
或者通过 v.end()-i,也可以获得相应元素的位置 (或者说获得相应元素的迭代器)
四.vector 使用场合
1.不确定数组大小
2.需要进行删除,随时添加元素等操作时,使用 vector,利用相关函数可以快速实现
举例
/*
输入:
5
xiaomajun 12 90
xiaoming 13 100
xiaohong 15 87
lili 11 99
lele 19 92
输出:
xiaomajun lele
xiaoming 13 100
xiaomajun 12 90
*/
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct Stu{
string name;
int id,s;//s:分数; id:学号
}x;
vector<Stu>v;
bool cmp(Stu x,Stu y){
return x.s>y.s;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x.name>>x.id>>x.s;
v.push_back(x);
}
vector<Stu>::iterator it1=v.begin();//it1指向首
vector<Stu>::iterator it2=v.end()-1;
cout<<(*it1).name<<" " <<(*it2).name<<endl;//输出
//删***aohong lili lele三位同学信息即删除v[2]~v[4]
v.erase(v.begin()+2,v.begin()+4+1);//[)
//对于vector按照分数从大到小排序排序
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++){
cout<<v[i].name<<" "<<v[i].id<<" "<<v[i].s<<endl;
}
return 0;
}
全部评论 1
太有帮助了
2024-08-05 来自 浙江
0
有帮助,赞一个