vector 学习笔记

vector类型简介:vector属于标准库,可以把它看成集合或者动态数组。我们可以把对象放在里面(对象类型必须一致)。它能把其他对象装进来,所以也被成为容器。

头文件 是 #include <vector>,在命名空间 std 里。

1、用法:

vector<int> vjihe;//表示vjihe里面保存的是int型数据

举例:

struct student
{
	int num;
};
int main()
{
	vector<int> vjihe;
	vector<student> studentlist;
	vector<int *> vjihe2;
	vector<int &> vjihe3 //这种写法是错误的,引用是一个别名,不是对象,所以不能放在vector内
	return 0;
}

2、定义和初始化vector对象

(1)、空vector和使用 push_back初始化

vector<string> mystr;//创建了一个string类型的空的vector容器
mystr.push_back("abc");//使用push_back给mystr添加元素
mystr.push_back("def");

(2)、使用元素拷贝初始化

vector<string> mystr2(mystr); //把mystr元素拷贝给了mystr2
vector<string> mystr3 = mystr;//和上面拷贝结果一样

(3)、C++11标准中,用列表初始化方式初始化

vector<string> mystr4 = {"aaa","bbb","ccc"};

(4)、创建指定数量元素(有元素数量概念的东西,一般会用圆括号)

vector<int> ijihe(15,-200);//创建15个int类型的元素,每个元素的值是-200
vector<string> mystr5(5,"cao");//创建5个string类型的元素,每个元素的值是 "cao"。
//如果不给初始值的话,系统会根据元素类型给默认值,比如上面不给初值-200,系统就会给默认初始值0。不给"cao",系统就会给默认""。
vector<int> ijihe2(20);//ijihe[0]到[19],每一个元素的值都是0.

(5)、多种初始化方式

vector<int> i(10);//表示i里有10个元素,每个元素的值是0
vector<int> i2{10}; //表示i2里只有一个元素,该元素值为10
vector<string> mystr6{"cao"}; //mystr里有一个元素,元素值为"cao" 
vector<string> mystr7{10};//mystr里有10个元素,每个元素都为""
vector<int> i3 {10,1};//i3里 有两个元素,第一个元素是10,第二个元素是1

3、vector对象上的操作

vector最常用的方式是,不知道vector里有多少个元素,需要动态增加、减少。所以一般先创建一个空的vector对象
vector有很多操作跟string很类似
(1)、判断是否为空

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; //100

(4)、clear,移除所有元素,将容器清空

ivec.clear();
cout << ivec.size() << endl;

(5)、v[n],返回v中的第n个元素。
n的范围从0开始,小于v.size()。如果引用下标超过这个范围,或者[]访问了一个空的vector,将会产生不可预估的结果。这种引用越界,编译器不会报错(因为没有语法错误)

cout << ivec[4]<< endl;//4

(6)、=

vector<int> ivec2;
ivec2.push_back(111);
ivec2 = ivec;//ivec2从ivec得到了100个元素,ivec2原来的111值被冲掉了
ivec2 = {1,2,3,4};
ivec2.size();//上一步ivec2里的值又被冲掉,此时打印4

(7)、== 和 !=
两个vector相等,元素数量想同,对应位置的元素值想同,否则就是不等。

vector<int> ivec3;
ivec3 = ivec;
if(ivec3 == ivec)
{
	cout << "等"<<endl;
}
ivec3.push_back(23);
if(ivec3!=ivec)
{
	cout << "不等" << endl;
}
ivec.clear();
ivec3.clear();
if(ivec3 == ivec)
{
	cout << "等" << endl;
}

(8)、范围for的应用

vector<int> vecvalue = {1,2,3,4,5};
for(auto &vecitem : vecvalue)
{
	vecitem = vecitem *2;//前面用的引用,所以修改vecitem的值,容器vecvalue的值也会变
}
for(auto vecitem : vecvalue)
{
	cout << vecitem << endl;//这里输出胡2 4 6 8 10
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值