vector的使用

1.构造函数

void test_vector1()
{
	vector<int> v; //无参的构造函数
	vector<int> v2(10, 0);//n个value构造,初始化为10个0
	vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化
	vector<int> v4(v3); //拷贝构造初始化
}

2.遍历vector的三种方式

//遍历vector
//1.下标[]
for (size_t i = 0; i < v3.size(); i++)
{
	cout << v3[i] << " ";//也可以用at
}
cout << endl;
//2.迭代器
vector<int>::iterator it = v4.begin();
while (it != v4.end())
{
	cout << *it << " ";
	++it;
}
//3.for
for (auto ch : v4)
{
	cout << ch << " ";
}
cout << endl;

3.析构函数

4.capacity

先看一下vector的扩容机制

void test_vector2()
{
	size_t sz;
	vector<int> v;
    v.reserve();提前开好空间,size没有变,capacity变了
	sz = v.capacity();
	cout << "making v grow:\n";
	for (int i = 0; i < 100; i++)
	{
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "capacity changed:" << sz << '\n';
		}
	}
}

输出:大概是1.5扩容

易错点:reserve空间开出来就可以访问吗?看下面的代码:

void test_vector3()
{
	vector<int> v;
	v.reserve(100); 
	/*for (size_t i = 0; i < v.size(); i++) 不能初始化,因为reserve只是把v的容量变成100,但是size还是0
	{
		v[i] = i;
	}*/
	for (size_t i = 0; i < 100; i++)//错误
	{
		v[i] = i;//[]只能访问0~size-1的数据
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

要是想访问,只能用下面的方法。

void test_vector3()
{
	vector<int> v;
//	v.reserve(100);//size=0  capacity=100
	v.resize(100); //size=100  capacity=100
	for (size_t i = 0; i < 100; i++)
	{
		v[i] = i;
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

其中最最重要的是resize和reserve,max_size是没有意义的接口,告诉能开多大空间,但是实际上不准,所以平时不需要管。 

5.[]、at

和string类似

front和back支持访问头尾的数据,但是一搬习惯于[]

6.push_back、pop_back

void test_vector4()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.insert(v.begin(), 5); //在pos位置之前,插入val
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
	auto it = find(v.begin(), v.end(), 3);//要想在3之前插入,vector里面没有find,algorithm算法库里面有find
	if (it != v.end())
	{
		v.insert(it, 30);
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
    删除
    it = find(v.begin(), v.end(), 3);
	if (it != v.end())
	{
		v.erase(it);
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
    //clear只是清除数据,不清除capacity
}

输出:

相关推荐

  1. C++ vector使用

    2024-05-05 00:14:01       10 阅读
  2. C++(1): std::vector使用

    2024-05-05 00:14:01       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-05 00:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-05 00:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-05 00:14:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-05 00:14:01       20 阅读

热门阅读

  1. 代码随想录leetcode200题之数组

    2024-05-05 00:14:01       14 阅读
  2. 品味酱香酒与浓香酒,选择最适合您的白酒

    2024-05-05 00:14:01       10 阅读
  3. 每日一练算法

    2024-05-05 00:14:01       10 阅读
  4. 绕过Windows 11的安装门槛

    2024-05-05 00:14:01       9 阅读
  5. Ubuntu22安装docker

    2024-05-05 00:14:01       11 阅读
  6. Json高效处理方法

    2024-05-05 00:14:01       10 阅读
  7. Visual Studio 2022 工具 选项 没有网络设置问题解决

    2024-05-05 00:14:01       11 阅读
  8. Docker

    Docker

    2024-05-05 00:14:01      10 阅读
  9. 小爱同学+Home Assistant实现开关电脑

    2024-05-05 00:14:01       27 阅读
  10. OSTEP Projects:Unix Utilities

    2024-05-05 00:14:01       11 阅读
  11. 抖音起号快速涨粉的N个方法!

    2024-05-05 00:14:01       10 阅读
  12. 鸿蒙应用开发系列 篇一:鸿蒙系统概述

    2024-05-05 00:14:01       10 阅读
  13. Spring中的StreamUtils:流式处理利器

    2024-05-05 00:14:01       12 阅读