☰
【c++】c语言入门到c++使用高手:深入学习C++之基本语言(八)
2026/10/23 4:03:10 网站建设 项目流程

第二章 基本语言

第八节 vector类型介绍

1. vector类型简介

  • 标准库:集合或者动态数组,我们可以把若干对象放在里边

  • vector能把其他对象装进来,也称为容器

#include<vector>// 表示的是vint里边保存的是int型数据(int型对象)vector<int>vint;// <int>:模板, vector本身就是类模板,<int>实际上就是类模板的实例化过程
  • vector 当成类型(残缺的类类型), vector:在vector之后加一对<>,<>内部放上类型信息,这样才算是完整的类类型
#include<iostream>#include<string>#include<vector>structstudent{intnum;};using namespace std;intmain(){vector<student>stulist;// 容器vector里面有都是一个vector<string>对象,集合套集合,用法可行vector<vector<string>>vecVecStr;// 往容器中装指针vector<int*>vpoints;// 引用是个别名,不是个对象,不是对象不能往容器中放,不可行// vector<int &> vyinyong;return0;}

2. 定义和初始化vector对象

  • 空vector
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){// 创建了一个string类型的空的vector对象(容器),目前vStr里不包含任何元素vector<string>vStr;vStr.push_back("I AM");vStr.push_back("Felaim");return0;}
  • 元素拷贝的初始化方式
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){vector<string>vStr;vStr.push_back("I AM");vStr.push_back("Felaim");// 把元素拷贝给了vStr1和vStr2vector<string>vStr1(vStr);vector<string>vStr2=vStr;return0;}
  • c++11标准中,用列表初始化方法来给值,用{}括起来
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){vector<string>vStr{"111","hahha","FELAIM"};return0;}
  • 创建指定数量的元素,有元素数量概念的对象一般会用()
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){// 创建15个int类型的元素,每个元素的值是99vector<int>vint(15,99);vector<string>vstr(5,"LOVE");vector<int>vint1(4);//定义4个元素,每个元素为0vector<string>vstr1(5);//定义5个元素,每个元素都为空串return0;}
  • 多种初始化方式,()一般表示元素数量,{}一般表示元素内容,但不绝对
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){vector<int>i1(10);//定义是10个元素,每个元素为0vector<int>i2{10};//定义一个元素,该元素值为10vector<string>snor{"hello"};//一个元素, "hello"vector<string>vs{10};//定义了10个空字符串vector<string>vs1{10,"love"};//10个元素,都为"love"vector<int>i3(10,1);//10个元素都为1vector<int>i4{10,2};//两个元素,一个为10,一个为2,等同于初始化列表// 要想正常的通过{}进行初始化,那么{}里边的值的类型,必须要跟vector后边这个<>里边元素类型相同return0;}

3. vector对象上的操作

  • 最常用的是不知道vector里有多少个元素,需要动态增加/减少,所以,一般来讲,先创建空vector
vector<int> vint;
  • 判断是否为空empty(),返回的是布尔值
if(vint.empty()){cout<<"vint is empty!"<<endl;}else{cout<<"vint is not empty!"<<endl;}
  • push_back:常用方法,用于vector中的末尾增加一个元素
vint.push_back(1);vint.push_back(99);
  • size():返回元素个数
cout<<"vint size is: "<<vint.size()<<endl;
  • clear():移除所有元素,将容器清空
vint.clear();
  • v[n]:返回v中的第n个元素,n代表位置,下标是从0开始的,下标不能越界
for(inti=0;i<10;i++){vint.push_back(i);}cout<<vint[1]<<endl;
  • = 赋值
vint1=vint;
  • ==,!=:判断相等还是不相等,元素数量相同,对应位置的元素值也得相同
vector<int>vint2=vint;if(vint2==vint){cout<<"vint2 = vint !"<<endl;}vint2.push_back(1);if(vint2!=vint){cout<<"vint2 != vint !"<<endl;}vint.clear();vint2.clear();if(vint2==vint){cout<<"vint2 = vint !"<<endl;}
  • 范围for的应用
vector<int>vint3{1,4,6,7};for(auto&v:vint3){v=v*v;}for(autov:vint3){cout<<v<<" ";}cout<<endl;
  • 完整范例
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){vector<int>vint;if(vint.empty()){cout<<"vint is empty!"<<endl;}else{cout<<"vint is not empty!"<<endl;}vint.push_back(1);vint.push_back(99);if(vint.empty()){cout<<"vint is empty!"<<endl;}else{cout<<"vint is not empty!"<<endl;}cout<<"vint size is: "<<vint.size()<<endl;vint.clear();cout<<"vint size is: "<<vint.size()<<endl;for(inti=0;i<10;i++){vint.push_back(i);}cout<<vint[1]<<endl;vector<int>vint1;vint1.push_back(12);vint1=vint;//vint1得到了10个元素,原来的元素被覆盖掉了vint1={1,3,10};cout<<vint1.size()<<endl;vector<int>vint2=vint;if(vint2==vint){cout<<"vint2 = vint !"<<endl;}vint2.push_back(1);if(vint2!=vint){cout<<"vint2 != vint !"<<endl;}vint.clear();vint2.clear();if(vint2==vint){cout<<"vint2 = vint !"<<endl;}vector<int>vint3{1,4,6,7};for(auto&v:vint3){v=v*v;}for(autov:vint3){cout<<v<<" ";}cout<<endl;return0;}
3.1 范围for进一步讲解
#include<iostream>#include<string>#include<vector>using namespace std;intmain(){vector<int>vint3{1,4,6,7};// 第一次进入循环后,系统会记住vint3结束的位置, 如果vint3添加或删除元素// 输出的值就会混乱for(autov:vint3){vint3.push_back(111);//导致输出混乱,无法控制cout<<v<<" ";}cout<<endl;return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询