C++中的STL标准库的vector常见接口

STL中的vector类似于c语言中的支持动态增长的数组,我们现在先不讨论底层原理,下次文章再讨论vector的底层实现。

在vector中需要定义动态数组中的类型,拿整型int来举例,创建一个整型vector数组

#include<vector>
#include<iostream>
int main()
{
    vector<int> v;
}

我们可以分成多个测试函数,分别测试不同的接口,写一个test_vector1用于测试,构造函数,拷贝构造,赋值运算符,

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

然后在主函数中测试

int main()
{

	test_vector1();
	test_vector2();
	test_vector3();
	test_vector4();
	test_vector5();

	return 0;
}

其中test_vector2(),用于测试数组中的写权限

void test_vector2()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	for (auto ch : v)
	{
		ch++;
		cout << ch << " ";
	}
	cout << endl;
}

test_vector3()用于测试迭代方式

void print_vector(const vector<int>& vt)
{
	vector<int>::const_reverse_iterator vb = vt.rbegin();//这里是逆置const迭代器
	while (vb != vt.rend())
	{
		cout << *vb << " ";
		vb++;
	}
	cout << endl;
}
void test_vector3()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	vector<int>::reverse_iterator rit = v.rbegin();//对应的变量要对应相对应的迭代器
	while (rit != v.rend())
	{
		(*rit)++;
		cout << *rit << endl;
		rit++;
	}
	print_vector(v);
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}
	vector<int>::iterator it = v1.begin();
	while (it != v1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	for (auto ch : v1)//范围for 底层实际上就是运用迭代器的原理
	{
		cout << ch << " ";
	}
	cout << endl;
}

test_vector4(),用于insert和erase vector中没有头插头删,因为效率太低了

void test_vector4()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(5);

	v1.insert(v1.begin(), 0);
	for (auto ch : v1)
	{
		cout << ch << " ";
	}
	cout << endl;
	v1.erase(v1.begin());
	for (auto ch : v1)
	{
		cout << ch << " ";
	}

}

test_vector5()用于使用算法find和sort(底层实现是快排),用于删除想要删除的元素

#include<algorithm>
void test_vector5()
{
	vector<int> v;
	v.push_back(7);
	v.push_back(4);
	v.push_back(5);
	v.push_back(2);
	v.push_back(92);
	v.push_back(41);
	v.push_back(20);
	//我要删除5
	for (auto ch : v)
	{
		cout << ch << " ";
	}
	cout << endl;
	vector<int>::iterator pos = find(v.begin(), v.end(),20);
	if (pos != v.end())
	{
		v.erase(pos); 
	}
	for (auto ch : v)
	{
		cout << ch << " ";
	}
	cout << endl;
	sort(v.begin(), v.end());//默认升序
	for (auto ch : v)
	{
		cout << ch << " ";
	}
	cout << endl;
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值