c++修炼之路之vector--标准库中的vector

目录

前言

一:vector的简介

二:vector的常用接口

1.构造函数

2.迭代器访问遍历数组 

3.容量接口函数 

4.增删查改接口函数

三:vector常用接口的全部代码 

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言

vector是表示一个可变大小的数组的容器,就和数组,顺序表一样,使用连续的空间来存储数据,访问数据,它的使用更加方便高效

一:vector的简介

对于vector简单来说就是一个可变大小的顺序表,就像数组一样,可以使用数组的下标来访问数据,当要新插入数据时,就要新开辟一个数组,将源数组内容 拷贝过去,在完成插入操作等

使用时要包含头文件#include <vector>

二:vector的常用接口

1.构造函数

对于构造函数和string有不同的是 vector可以使用一段迭代器区间来构造

演示代码如下

#include <iostream>
using namespace std;
#include <vector>
#include<string>
int main()
{
	vector<int> v1;//无参构造
	for (auto c : v1)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v2(10, 1);//n个val来构造
	for (auto c : v2)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v3(v2.begin(), v2.end());//使用一段迭代器区间来构造
	for (auto c : v3)
	{
		cout << c << " ";
	}
	cout << endl;

	string str("Hello world");
	vector<int> v4(str.begin(), str.end());//使用一段迭代器区间来构造,可以是任意类型的一段迭代器区间
	for (auto c : v4)
	{
		cout << c << " ";
	}
	cout << endl;

	vector<int> v5(v3);//拷贝构造
	for (auto c : v5)
	{
		cout << c << " ";
	}
	cout << endl;

	return 0;
}

2.迭代器访问遍历数组 

这里用迭代器来遍历数组就和string的一样,主要掌握正向反向迭代器,const对象的使用的const迭代器,有了迭代器就可以使用范围for来遍历数组,这里的迭代器依旧可以理解为指针遍历数组

演示代码如下

vector<int> v1(10, 1);
//三种遍历方式
for (int i = 0; i < v1.size(); i++)
{
	cout << v1[i] << " ";
}
cout << endl;

vector<int>::iterator it = v1.begin();
while (it != v1.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;

vector<int>::reverse_iterator rit = v1.rbegin();//反向迭代器
while (rit != v1.rend())
{
	cout << *rit << " ";
	++rit;
}
cout << endl;

for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

3.容量接口函数 

对于reserve只是开空间,对于vs是1.5倍扩容,而g++是2倍扩容,如果提前知道要开辟的空间有多大的话,可以使用reserve提前开空间减少扩容带来的消耗,只改变capacity

对于resize是开空间+初始化,改变size,如果resize要开的空间小于size的话,相当于删除数据,但capacity不改变;resize要开的空间大于capacity的话,size和capacity都改变

代码演示 

 

vector<int> v;
v.reserve(50);  // size = 0    capacity 50
v.resize(100,1);     // size = 100  capacity 100
cout << v.size() << endl;
cout << v.capacity() << endl;

4.增删查改接口函数

特别注意尤其对于insert和erase都存在迭代器失效的问题,对于vs是直接报错的,在模拟实现中详细介绍原因和解决办法 

代码演示

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
for (int i = 0; i < v1.size(); i++)
{
	cout << v1[i] << " ";
}
cout << endl;

v1.pop_back();
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

//insert和erase要结合find函数共同完成操作
//vector<int>::iterator pos = find(v1.begin(), v1.end(), 3);
auto pos = find(v1.begin(), v1.end(), 3);
if (pos != v1.end())
{
	v1.insert(pos,4);//3前面插入4
}
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

pos= find(v1.begin(), v1.end(), 3);
if (pos != v1.end())
{
	v1.erase(pos);//删除pos位置的值
}
for (auto c : v1)
{
	cout << c << " ";
}
cout << endl;

三:vector常用接口的全部代码 

https://gitee.com/lin-ciyu/cplusplus/blob/master/vector/vector/testcpp.cpp

四:对于vector的常用接口函数的介绍就到这里了,但vector的使用还是较重要的,遇到忘记的接口了,去查查标准文档理解理解就足够了

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值