C++STL-Vector篇

2 篇文章 0 订阅

vector概述

容器是一些特定类型对象的集合,vector是一种顺序容器,它提供了控制元素存储和访问顺序的能力,这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。
vector类型 - 可变大小数组。支持快速随机访问。在尾部之外的位置插入和删除元素可能很慢。

Vector定义和初始化

定义:

 //Vector<type_name>name
 //type_name:vector所存数据的类型,eg:int float,也可以是复合型
 //name:vetcor这个数组的名字
//eg:
class MyClass{
private:
	int t;
public:
	MyClass():t(0){};
	int getT() { return t; };
};
vector<int>arr;
vector<MyClass>arr1;

初始化:

第一种:直接拷贝

直接拷贝有两种:1、直接拷贝整个容器;2、拷贝由迭代器指定的元素范围(迭代器后面再写)。
直接拷贝另一个容器要求两个容器的类型和元素类型必须匹配,不过第二种拷贝方式容器类型可以不同。

	vector<int>arr;
	list<int>arr1 = { 0,1,2,3 };
	vector<MyClass>arr1;
	for (auto i = 0; i < 10; i++)
		arr.push_back(i);
	//第一种
	vector<int>arr2 = arr; // right
	vector<int>arr3 = arr1;//wrong,容器类型不匹配
	//第二种
	vector<int>arr4(arr.begin(), arr.end());//right
	vector<int>arr5(arr1.begin(), arr1.end());//right

第二种:列表初始化

在C11标准中,可以对Vector进行列表初始化。

vector<int>arr6{0,1,2};//初始化了一个大小为3,值分别为0,1,2的vector

第三种: 与vector大小相关的构造函数

vector提供了一个构造函数,它接受一个容器大小和元素初始值(可选)。

vector<int>arr7(10,-1);//初始化10个int,每一个大小都是-1.
vector<int>arr8(10);//初始化10个int,每一个大小都是默认值0

赋值

赋值主要有以下几种:1、直接拷贝另一个vector;2、替换为右边元素的拷贝;3、使用assign(a,b),拷贝另一个容器[a, b)中的元素

	arr1 = arr;//size大小和value大小与arr相同
	arr1 = { 1, 2, 3 };//size = 3,values分别为1,2,3
	arr1.assign(arr.begin(), arr.end());//size大小和value大小与arr相同

基本操作函数

这些操作主要包含了vector的增删改查.

增:

主要是两个函数:push_back 和 insert

arr.push_back(i);//push_back在vector末尾添加一个元素i
arr1.insert(arr.begin()+i, i)//在arr的第i个位置插入元素i,

删:

主要是两个函数:pop_back和earse

if(!arr.empty())arr.pop_back();//不用参数,在不为空的情况下删除vector最后一个值,
arr.earse(arr.begin() + 1);//删除第一个元素
arr.earse(arr.begin()+1, arr.begin()+3);//删除第一个和第二个元素

改 和 查:

改比较简单,直接用赋值符号就行了

arr[i] = 1;//把1赋值给第i个值
//如果知道下标就直接访问,不然只能一个一个的找
return arr[i];//直接访问
for (auto i = 0; i < arr.size(); i++)
	if(arr[i] == target)
		return arr[i];

其他操作

arr.size();//返回容器大小
arr.empty();//bool类型,检查容器是否为空。

参考书籍:C++Primer第五版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值