【C++初阶】vector

请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

🍑vector介绍

  1. vector是表示可变大小数组的序列容器,和我们在C语言中学习的顺序表相类似

  2. vector的存储形式和数组一样,采用连续的空间存储,vector也可以用下标进行访问,但有一点和数组不同,vector空间满了,它的大小是变化的,空间满了,容器会自动扩容。

  3. 每当一个新的元素加入时,为了增加存储空间,vector并不会重新分配空间,而是会重新开辟一个新的vector容器,然后全部数据存储到新的vector。

  4. vector相较于其它容器,它访问元素效率更高,末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。

vector容器和容器string的功能相类似,增删查改都差不多,不过唯一需要注意的是使用vector容器是需要带类型,而string 不需要带类型。

🍑vector迭代器

在这里插入图片描述
迭代器我们掌握前面四种就可以了。

begin()和end()是正向迭代器iterator, rbegin()和rend()是反向迭代器reverse_iterator.

在这里插入图片描述

这幅图简单的说明了迭代器的基本使用。

用遍历来演示迭代器的用法:

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);
vv.push_back(4);
vv.push_back(5);
vector<int>::iterator it = vv.begin();
while (it != vv.end())
{
	cout << *it << " ";
	it++;
}

在这里插入图片描述

🍑vector构造

🍍无参构造

vector<int> vv;
vector<char> cc;
vector<long long> aa;
vector<string> bb;
......

上面就是几种常见的无参构造,当然不仅仅只有这些。
vector类带的类型也可以是容器。

🍍有参构造

vector<int> vv(2,100);
vector<char> cc(2,'a');
vector<long long> aa(3,3.50);
vector<string> bb(2,"hello world");

在这里插入图片描述
从结果可以看到vector的有参构造和string差不多,但是vector必须要带次数,也就是vector的有参构造,类型为(int, void) 。

还有一种有参构造,就是利用迭代器进行有参构造

vector<int> vv(2,100);
vector<int> aa(vv.begin(), vv.end());

在这里插入图片描述

🍑vector常用接口

🍍 size()

size():获取数据个数

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);
vv.push_back(4);
vv.push_back(5);
cout << vv.size() << endl;

在这里插入图片描述

🍍capacity()

capacity(): 获取空间容量大小

🍍empty()

empty(): 判断是否为空,返回的是布尔值

vector<int>  vv;
cout << vv.empty() << endl;
vv.push_back(1);
cout << vv.empty() << endl;

在这里插入图片描述

🍍resize()

resize():改变vector的数据大小

vector<int>  vv;
cout << vv.size() << endl;
vv.resize(100);
cout << vv.size() << endl;

在这里插入图片描述

🍍reserve()

reserve():改变vector空间容量的大小

vector<int>  vv;
cout << vv.capacity() << endl;
vv.reserve(100);
cout << vv.capacity() << endl;

在这里插入图片描述

🍑vector增删查改

🍍push_back()

push_back():对vector进行尾插

	vector<int> vv;
	vv.push_back(1);
	vv.push_back(2);
	for (auto in : vv)
	{
		cout << in << " ";
		in++;
	}
	cout << endl;
	vv.push_back(7);
	for (auto in : vv)
	{
		cout << in << " ";
		in++;
	}
	cout << endl;
	vv.push_back(1);
	vv.push_back(2);
	for (auto in : vv)
	{
		cout << in << " ";
		in++;
	}

在这里插入图片描述

🍍pop_back()

pop_back():对vector进行尾删。

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);
for (auto in : vv)
{
	cout << in << " ";
	in++;
}
cout << endl;
vv.pop_back();
for (auto in : vv)
{
	cout << in << " ";
	in++;
}
cout << endl;
vv.pop_back();
for (auto in : vv)
{
	cout << in << " ";
	in++;
}

在这里插入图片描述

🍍insert()

insert():对vector,进行插入操作。

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);

vv.insert(vv.begin(), 44);
vv.insert(vv.end(), 99);

for (auto in : vv)
{
	cout << in << " ";
}
cout << endl;

在这里插入图片描述

在vector中pos位置前进行插入,这幅图中vv.begin()和vv.end()代表pos。

🍍erase()

erase():对vector进行删除操作。

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);
for (auto in : vv)
{
	cout << in << " ";
}
cout << endl;

vv.erase(vv.begin());

for (auto in : vv)
{
	cout << in << " ";
}
cout << endl;

在这里插入图片描述
在vector中pos位置进行删除,vv.begin()代表的就是pos位置

🍍swap()

swap():对两个vector内容进行交换。

vector<int> vv(4, 99);
vector<int> aa(5, 1);
for (auto in : vv)
{
	cout << in << " ";
}
cout << endl;
for (auto in : aa)
{
	cout << in << " ";
}
cout << endl;

swap(vv, aa);

for (auto in : vv)
{
	cout << in << " ";
}
cout << endl;
for (auto in : aa)
{
	cout << in << " ";
}
cout << endl;

在这里插入图片描述

🍍operator[]

operator[]:让vector可以像数组一样可以对下标进行访问。

vector<int> vv;
vv.push_back(1);
vv.push_back(2);
vv.push_back(3);
vv.push_back(4);

for (int i = 0; i < vv.size(); i++)
{
	cout << vv[i] << " ";
}
cout << endl;

在这里插入图片描述

关于本章知识点如果有不足或者遗漏,欢迎大家指正,谢谢!!!

请添加图片描述
请添加图片描述

  • 98
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 40
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悦心无谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值