一、vector类型简介
标准库:集合或动态数组,我们可以放若干对象放在里面。
vector他能把其他对象装进来,也被称为容器
#include <iostream>
#include <vector>
using namespace std;
struct student{int num;};
int main()
{
// 表示这个集合对象保存的是int型数据
vector<int> vjihe;
// <int>:模板,vector本身就是个类模板,
// <int>实际上就是类模板的实例化过程。
// 存放学生类型的集合
vector<student> vstudlist;
// 相当于二维的字符串。
vector<vector<string>> strchuan;
vector<int *> vjihe2;
// 不能向集合中装引用
// 引用知识一个别名,不是对象。
//vector<int &> vjihe3;
return 0;
}
二、定义和初始化vector对象
(1)空的vector
// 创建一个string类型的空的集合
vector<string> mystr;
//push_back()
mystr.push_back(“abc”);
mystr.push_back(“efg”);
(2)元素拷贝的初始化方式
// 将mystr元素拷贝给mystr2
vector<string> mystr2(mystr);
// 将mystr元素拷贝给mystr3
vector<string> mystr3 = mystr;
(3)C++11标准中,用列表初始化方法给值,用{}括起来
vector<string> mystr4 = {“aaa”,”bbb”,”ccc”};
(4)创建指定数量的元素
// 创建15个int类型的元素,每个元素的值为-200
vector<int> ijihe(15,-200);
// 创建15个int类型的元素,每个元素的值为hello
vector<string> sjihe(15,”hello”);
// 15个元素,每一个元素值默认为0
vector<int> ijihe2(15);
// 15个元素,每一个元素值默认为空
vector<string> sjihe(15);
(5)多种初始化方式,()一般表示元素数量,{}一般表示元素内容这个概念,但不绝对。
想要正常的通过{}初始化,那么{}里面值的类型,必须要跟vector后面这个<>里面的元素类型相同。
// 表示创建10个元素,每个元素值为0
vector<int> i1(10);
// 表示创建一个元素,该元素的值为10
vector<int> i2{10};
// 创建一个元素,元素内容为hello
vector<string> snor{“hello”};
// 10个元素,每个元素为空
vector<string> s22{10};
// 10个元素,每一个元素内容为hello
vector<string> s23{10,,”hello”};
//10个元素,每个元素值为1
vector<int> i3(10,1);
// 2个元素
vector<int> i4{10,1};
// 语法错误
//vector<int> i4{“hello”};
三、vector对象上的操作
最常用的是不知道vector里面有多少个元素,需要动态的增加/减少。
一般情况下,先创建空的vector对象。
(1)判断是否为空empty(),返回布尔值
vector<int> ivec;
if(ivec.empty())
{
cout << “ivec为空” << endl;
}
(2)push_back():用于向vector中的末尾添加一个元素
ivec.push_back(1);
ivec.push_back(2);
for(int i = 3; i <= 100; i++)
{
ivec.push_back(i);
}
(3)size():返回元素个数
cout << ivec.size() << endl;
(4)clear():移除所有元素,将容器清空
//ivec.clear();
//cout << ivec.size() << endl;
(5)ivec[n]:返回ivec中第n个元素(n是个整型值),位置从0开始,必须小于.size(),如果引用的下标超过这个范围,或者用[]访问了一个孔的vector,那么就会产生不可预测的结果,编译器发现不了。
// [0]:1 ,[1]:2
cout << ivec[1] << endl;
(6)= 赋值
vector<int> ivec2;
ivec2.push_back(111);
// ivec2得到了100个元素,ivec2原来的元素消失。
ivec2 = ivec;
// 用{}的值取代了ivec2中原来的值
ivec2 = {12,13,14,15};
cout << ivec2.size() << endl;
(7)==,!= 相等,不相等
两个vector相等,元素数量相等,对应位置元素值也一样,否则就是不相等
int ivec3 = ivec2;
if(ivec3 == ivec2)
{
cout << “ivec3 == ivec2” << endl;
}
ivec3.push_back(3);
if(ivec3 != ivec2)
{
cout << “ivec3 != ivec2” << endl;
}
ivec3.clear();
ivec2.clear();
if(ivec3 == ivec2)
{
cout << “ivec3 == ivec2” << endl;
}
(8)for语句的应用
vector<int> vecvalue{1,2,3,4,5};
// 引用起到修改变量的作用
for(auto &vecitem : vecvalue)
{
vecitem *= 2;
}
for(auto vecitem : vecvalue)
{
// 2,4,6,8,10
cout << vecitem << endl;
}
(8)范围for的进一步理解
for(auto vecitem : vecvalue)
{
// 导致输出彻底乱套
//vecvalue.push_back(888);
cout << vecitem << endl;
}
在for语句中遍历一个容器等等类似操作,千万不要改动vector容器的容量,增加/删除都不可以,否则会出问题。
好了,今天的C++学习到这里就结束了,喜欢的朋友给我点个赞哦!!!
网友评论