vector常见接口的用法

补:迭代器是一个左闭右开区间

vector

简单理解vector是表示可变大小数组的序列容器

vector的使用

一、vector的定义
构造函数声明接口说明序列
vector()无参的构造1
vector(size_type n,const value_type& val=value_type())构造并初始化n个val2
vector(const vector& x)拷贝构造3
vector (InputIterator first, InputIterator last);使用迭代器进行初始话构造4
	//1
	vector<int> arr1;
	//3
	vector<int> arr3(arr2);
	//2
	vector<int> arr4(5,0);
	//4 这个是用迭代器实现的
	string std("hello");
	vector<char> ch1(std.begin(), std.end());
	//5 还可以这样初始化只不过C++98不支持这样
	vector<int> arr2 = { 1,2,3,4,5 };
二、vector iterator 的使用
iterator的使用接口说明
begin()+end()获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位置 的iterator/const_iterator
rbegin()+rend()获取最后一个数据位置的reverse_iterator,获取第一个数据前一个位置的 reverse_iterator
	//接着上面定义的ch1和arr3   
	//不不想写这么长也可以用auto自动推导
	//for (auto it = ch1.begin(); it != ch1.end(); ++it)
	for (vector<char>::iterator it = ch1.begin(); it != ch1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//for (auto it = arr3.rbegin(); it != arr3.rend(); ++it)
	for (vector<int>::reverse_iterator it = arr3.rbegin(); it != arr3.rend(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
三、vector空间增长
容量空间接口说明
size获取数据个数
capacity获取容量大小
empty判断是否为空
resize改变vector的size
reserve改变vector放入capacity

在这里插入图片描述
在这里插入图片描述

  • capacity的代码在vs和g++的增长是不一样的,vs下capacity是按1.5倍增长的,g++是按2倍增长的(vs是PJ版本的STL,g++是SGI版本的STL)

  • reserve只负责开辟空间,如果确定知道需要多少空间,reserve可以缓解vector增容的代价缺陷问题

  • resize在开空间的同时还会进行初始化,会影响size

  • resize如果出现size比原先的小的情况,虽然不会缩小空间但是会改变size
    在这里插入图片描述

四、vector 增删查改
vector增删查改接口说明
push_back尾插
pop_back尾删
find查找(这个是算法模块实现的,不是vector的成员接口)
insert在position之前插入val
erase删除posistion位置的数据
swap交换两个vector的数据空间
operator[]像数组一样访问
clear清空数据,不会清除空间
assign新内容是从‎‎第一个‎‎和‎‎最后‎一个之间的范围内的每个元素构造的元素,顺序相同;新内容是n 个‎‎元素,每个元素都初始化为val‎的副本。‎‎如果发生重新分配,则使用‎‎内部分配器分配‎‎所需的存储。
	vector<int>arr1;
	//尾插一个数据
	arr1.push_back(1);
	arr1.push_back(2);
	arr1.push_back(3);
	arr1.push_back(4);
	arr1.push_back(5);
	//用迭代器去遍历
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//左边传的是迭代器,右边是要插入的数据
	arr1.insert(arr1.begin() + 3, 6);
	arr1.insert(arr1.begin() + 3, 7);
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//尾删一个数据,没有参数直接调用即可
	arr1.pop_back();
	arr1.pop_back();
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//迭代器传位置
	arr1.erase(arr1.end()-2);
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	vector<int> arr2;
	//交换
	swap(arr1, arr2);
	swap(arr2[0], arr2[3]);

	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (vector<int>::iterator it = arr2.begin(); it != arr2.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	arr1 = { 9,8,7,6,5 };
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//清空数据
	arr1.clear();
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;

在这里插入图片描述

	vector<int>arr1 = { 9,8,7,6,5 };
	vector<int>arr2 = { 0,1,2,3,4,10,11,12 };
	//通过迭代器,可以给arr1赋值其他对象的数据
	//如果赋值的那个对象比原先对象要打大,会自动扩容至与大的对象的capacity相同
	arr1.assign(arr2.begin(), arr2.end());
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//左边是个数,右边是值,也是就赋8个0
	arr1.assign(8, 0);
	for (vector<int>::iterator it = arr1.begin(); it != arr1.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	//find不是vector的成员接口,是算法库里面的,使用时必须包含头文件 #include<algorithm>
	vector<int>arr1 = { 1,2,3,4,5,6,7,8 };
	//find前两个参数传的是一段迭代器的区间,第三个参数是需要查找的数据
	//如果能找到就返回找到数据位置的迭代器,如果找不到就返回end(),所以要进行判断
	vector<int>::iterator it=find(arr1.begin(), arr1.end(),9);
	if (it != arr1.end())
	{
		cout << *it << endl;
	}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值