<C++>vector容器在算法题中应用那么广泛,确定不来深入了解一下吗_c++中vector用的多吗

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

🔥前言

上一次分享的是string容器的概念、基本使用和常用方法,在这之后我们来学习一个算法题中C++语言最火的一个容器——vector,学习vector容器的底层概念并且会使用构造和他的的常用方法,让我们深入了解vector容器然后刷些C++算法题充实自己吧!

文章目录

vector容器的概念模型

vector容器是一个单端数组(一般默认前端是封闭的)

  • 示意图
    在这里插入图片描述

vector和数组的区别

  • 普通数组是静态空间,而vector可以进行动态扩展
  • 动态扩展过程

并不是直接在原有空间中进行扩容,而是找到一个更大的空间,将原有数据拷贝到大空间内,并释放原有的空间

  • vector容器的迭代器是支持随机访问的迭代器(功能强大)
    • 常用迭代器
      在这里插入图片描述

v.begin()v.end()分别代表容器的第一个元素和最后一个元素的下一个位置;v.rbegin()v.rend()则分别代表最后一个元素和第一个元素前面的位置;insert()用来把元素插入到容器内

vector容器的基本操作

包括构造方法、赋值、计算容量和大小、插入删除等

构造函数

  • 创建vector容器的方法

函数原型

  • vector<T> v;其中T是泛型,用来存放数据类型,这是默认构造函数,较为常用
  • vector(v.begin(),viend()); 将[v.begin(),v.end)前闭后开的区间内的元素拷贝给本身容器
  • vector(n,elem);构造函数将n个elem值拷贝给本身容器
  • vector(const vector &ans);拷贝构造函数

代码示例:

void printVector(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << \*it << " ";
	}
	cout << endl;
}
//vector容器构造
void test()
{
	vector<int>v1;//默认构造 无参构造
	for (int i = 0; i < 6; i++)
	{
		v1.push\_back(i);
	}
	printVector(v1);

	//通过区间的方式进行构造
	vector<int>v2(v1.begin(), v1.end());
	printVector(v2);
	
	//n个elem方式构造
	vector<int>v3(6, 666);//6个666
	printVector(v3);

	//拷贝构造
	vector<int>v4(v3);
	printVector(v4);
}

tips:建议使用1、4两种构造函数

赋值操作

  • 给vector容器赋值

函数原型:

  • vector& operator=(const vector &ans);重载赋值操作符
  • assign(be,en);将[be,en)区间内的数组拷贝赋值给自己
  • assign(n,elem);将n个elem拷贝赋值给自己

代码示例:

//vector赋值
void PrintVector(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << \*it << " ";
	}
	cout << endl;
}
void test()
{
	vector<int>v1;
	for (int i = 0; i < 10;i++)
	{
		v1.push\_back(i);
	}
	PrintVector(v1);

	//赋值 operator= 
	vector<int>v2;
	v2 = v1;
	PrintVector(v2);

	//assign
	vector<int>v3;
	v3.assign(v1.begin(), v1.end());//闭 开
	PrintVector(v3);

	//n个elem方式赋值
	vector<int>v4;
	v4.assign(6, 66);//6个66
	PrintVector(v4);
}

tips:vector赋值操作简单,直接使用等号和使用assign都可以

容量和大小

  • 对vector容器的容量和大小操作

函数原型:

  • empty();判断容器是否为空
  • capacity();容器中的容量大小
  • size();返回容器中元素的个数
  • resize(int sum);重新指定容器长度为num,容器变长以默认值填充,容器变短则超出部分删除
  • resize(int num,elem)同上,区别是默认值填充变为elem值填充

代码示例:

void test()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push\_back(i);
	}
	if (v1.empty())
	{
		cout << "空" << endl;
	}
	else
	{
		cout << "不空" << endl;
	}
	cout << "v1的容量=" << v1.capacity() << endl;
	cout << "v1的大小=" << v1.size() << endl;
	//重新指定大小
	v1.resize(10,666);//利用重载版本,可以指定默认填充值
	v1.resize(5);
}

插入和删除

  • 对vector容器进行插入、删除操作

函数原型:

  • push_back(e);尾部插入元素e
  • pop_back();删除最后一个元素
  • insert(const_iterator pos,e);迭代器指向位置pos插入指定元素e
  • insert(const_iterator pos,int count ,e); 插入count个指定元素e
  • erase(const_iterator pos);删除迭代器指向的元素
  • erase(const_iterator begin,const_iterator end);删除迭代器从begin到end之间的元素
  • clear();清空容器内所有元素

代码示例:

void PrintVector(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << \*it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	//尾插法
	v1.push\_back(10);
	v1.push\_back(20);
	v1.push\_back(50);

	//遍历
	PrintVector(v1);
	
	//尾删
	v1.pop\_back();
	PrintVector(v1);

	//插入
	v1.insert(v1.begin(), 66);
	PrintVector(v1);

	v1.insert(v1.begin(), 2, 666);


![img](https://img-blog.csdnimg.cn/img_convert/d44d7a566759ed3b1f3b84de7549624e.png)
![img](https://img-blog.csdnimg.cn/img_convert/2cf88fd4871402d3f84cd2355d4e8c06.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

6);


[外链图片转存中...(img-v2ZcS41F-1715893109572)]
[外链图片转存中...(img-LPezYlBp-1715893109573)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值