vector是什么、push_back、迭代器、构建string类型的数组、vector的构造初始化、sort算法排序、reserve函数、头删、头插、删除(所有)某个数字、vector的扩容等的介绍


前言

vector是什么、push_back、迭代器、构建string类型的数组、vector的构造初始化、sort算法排序、reserve函数、头删、头插、删除(所有)某个数字、vector的扩容等的介绍


一、vector是什么?

vector是一个可以更改大小的数组模板。可以使用不同的类型,构建不同类型的数组。

二、push_back、迭代器使用

#include<iostream>
#include <vector>

using namespace std;

void Test_vector1()
{
	vector<int> v;

	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	cout << v.size() << endl;
	cout << v.capacity() << endl;


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

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

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{
	Test_vector1();

	return 0;
}

在这里插入图片描述

二、构建string类型的数组

void Test_vector2()
{
	vector<string> str;
	
	string s("hello world ");
	str.push_back(s);

	str.push_back(string("hello csdn "));

	str.push_back("张三");


	for (auto ch : str)
	{
		cout << ch << " ";
	}
	cout << endl;
}

在这里插入图片描述

四、vector的构造初始化、sort算法排序

default (1)	explicit vector (const allocator_type& alloc = allocator_type());
fill (2)	explicit vector (size_type n, const value_type& val = value_type(),
            		const allocator_type& alloc = allocator_type());
range (3)	template <class InputIterator>
         vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());
copy (4)	vector (const vector& x);
  • value_type()就是模板T,(元素的类型)

void Test_vector3()
{
	// n 个  value_type初始化
	vector<int> v1(10, 1);

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


	vector<string> v2(10, "###");

	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;


	// 自己类型的迭代器初始化
	vector<int> v3(v1.begin(), v1.end());
	for (auto e : v3)
	{
		cout << e << " ";
	}
	cout << endl;


	vector<string> v4(v2.begin(), v2.end());
	for (auto e : v4)
	{
		cout << e << " ";
	}
	cout << endl;

	string s("hello world");
	vector<char> v5(s.begin(), s.end());
	for (auto e : v5)
	{
		cout << e << " ";
	}
	cout << endl;

	int a[] = { 16,28,37,65,98,200,35 };
	vector<int> v6(a, a + sizeof(a) / sizeof(a[0]));
	for (auto e : v6)
	{
		cout << e << " ";
	}
	cout << endl;


	// sort算法排序
	// sort算法默认是升序
	// less
	sort(v6.begin(), v6.end());
	for (auto e : v6)
	{
		cout << e << " ";
	}
	cout << endl;
	// 降序
	// greater
	//greater<int> gt;
	//sort(v6.begin(), v6.end(), gt);
	sort(v6.begin(), v6.end(), greater<int>());
	for (auto e : v6)
	{
		cout << e << " ";
	}
	cout << endl;


	string sstr("lays and gentlmen");
	sort(sstr.begin(), sstr.end());
	for (auto e : sstr)
	{
		cout << e << " ";
	}
	cout << endl;

}

在这里插入图片描述

五、reserve函数

在这里插入图片描述

  • 一段经典的错误代码
    reserve(10)开辟了10个空间,但是size的值并没有变化。
    【】的运算符重载函数,首先就需要assert断言pos位置必须小于size,size为0,所以此处断言报错。
  • 正确的做法是使用resize函数
void Test_vector4()
{
	vector<int> v1;
	// 开辟10个空间
	/*v1.reserve(10);
	for (size_t i = 0; i < 10; i++)
	{
		v1[i] = i;
	}

	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;*/

	v1.resize(10);
	for (size_t i = 0; i < v1.size(); i++)
	{
		v1[i] = i;
	}

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

}

在这里插入图片描述


-如果必须用reserve,则可以使用push_back插入数据,如下:

vector<int> v2;

v2.reserve(10);

for (size_t i = 0; i < 10; i++)
{
	v2.push_back(i);
}

for (auto e : v2)
{
	cout << e << " ";
}
cout << endl;

在这里插入图片描述

六、头删、头插、删除(所有)某个数字(find先找到找这个数字)

void Test_vector5()
{
	int array[] = { 16,23,38,0,25,4,66,97,73,52,68,49,31 };
	vector<int> v1(array, array + sizeof(array) / sizeof(array[0]));
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	// 头删
	v1.erase(v1.begin());
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	// 头插
	v1.insert(v1.begin(), 100);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;


	// 删除第3个数据
	v1.erase(v1.begin() + 2);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	cout << "---------------------------" << endl;

	int a[] = { 15,6,3,18,5,6,20,60, 5, 6, 5 };
	vector<int> v2(a, a + sizeof(a) / sizeof(a[0]));

	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// 删除5, 先通过find找到5

	//vector<int>::iterator pos = find(v2.begin(), v2.end(), 5);
	auto pos = find(v2.begin(), v2.end(), 5);
	if (pos != v2.end())
	{
		v2.erase(pos);
	}
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;


	// 删除所有的5

	//vector<int>::iterator pos = find(v2.begin(), v2.end(), 5);
	auto pos1 = find(v2.begin(), v2.end(), 5);

	while (pos1 != v2.end())
	{
		v2.erase(pos1);
		pos1 = find(v2.begin(), v2.end(), 5);
	}
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;

}

在这里插入图片描述

七、vector的扩容

windows环境下

void Test_vector6()
{
	vector<int> v;
	size_t sz = v.capacity();

	cout << "vector<int>的扩容:" << endl;

	for (size_t i = 0; i < 100; i++)
	{	
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "扩容: " << sz << endl;
		}
	}
}

在这里插入图片描述

总结

vector是什么、push_back、迭代器、构建string类型的数组、vector的构造初始化、sort算法排序、reserve函数、头删、头插、删除(所有)某个数字、vector的扩容等的介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值