STL vector类模板

STL中的vector是一个序列式容器,兼备队列、数组和堆栈特性,提供随机访问和迭代器功能。本文将探讨vector的基本操作,如初始化、清空、删除和插入,以及遍历、查找和排序算法的应用。请注意,不同类型的vector对象无法交换元素。
  • vector是一个序列式容器,可以实现队列、数组和堆栈的所有功能。像一个动态数组,可以随机访问元素,迭代器也是随机存取迭代器。

  • 初始化,清空,删除,插入等基本操作

#include <vector>		//包含头文件
#include <string>

using namespace std;

	vector<string> myvt;        //初始化
		
	myvt.push_back("a");	    //将对象放入容器尾部
	myvt.pop_back();            //从容器尾部删除对象
	myvt.earse(myvt.begin());	//删除第一个对象

	cout << myvt.front();       //返回第一个元素
	cout << myvt.back();		//返回最后一个元素

	//insert()用于在指定的位置进行插入
	myvt.insert(myvt.begin(), "c");						    //在第一个元素之前插入
	myvt.insert(myvt.end(), myvt2.begin(), myvt2.end());	//在尾部插入一段元素
		
	//定义vector类对象但未设置容器大小,不允许给容器中元素赋值
	myvt.reserve(4);			//预设容器大小
	myvt[0] = "a";
	myvt[1] = "b";

	int a  = myvt.size();		//返回容器中现有的元素数量
	int b  = myvt.capacity(); 	//返回容器中实际能容纳的元素数量
	bool c = myvt.empty(); 		//判断容器是否为空
	myvt.clear();				//清空容器	
  • 遍历容器
	//STL迭代器刚好指向每个元素,begin指向第一个元素,end指向超尾元素
	vector<string>::iterator it;
	for(it = myvt.begin(); it != myvt.end(); it++)
		cout << *it << endl;
		
	//可以用at()遍历容器	
	for(int i = 0; i < myvt.size(); i++)	
		cout << myvt.at(i);
		
	//for_each()可以用来按给定的算法遍历容器
	void printOut(string a)	{cout << a << endl;}
	for_each(myvt.begin(), myvt.end(),printOut);

	//count_if()可以按给定的算法遍历容器并计数
	bool ifNull(string a) 
	{
		if(a.empty())	return true;
		else 			return false;
	}
	int count = count_if(myvt.begin(), myvt.end(), ifNull);
  • 查找,排序算法
	//使用STL通用算法,find()可用于查找vector中的指定元素,find_if()用于有条件查找,查找不到时返回的迭代器指向end()
	vector<int> myvt;
	vector<int>::iterator it;
	it = find(myvt.begin(), myvt.end(), 1);
	it = find_if(myvt.begin(), myvt.end(), bind2nd(greater<int>(),5));
	
	//sort()用于元素排序,默认使用<运算符,类中元素要支持这个运算符
	class student
	{
		public:
			student(const string& a, double b):m_name(a), m_score(b){}
			string m_name;
			double m_score;
			bool operator<(const student& m) const
			{return m_score < m.m_score;}
	};
	bool nameSortLess(const student& m, const student& n)
	{return m.m_name < n.m_name;}

	vector<student> myvt;
	sort(myvt.begin(), myvt.end());					//sort()默认使用类的重载运算符<
	sort(myvt.begin(), myvt.end(), nameSortLess)	//sort()使用显示定义了的函数进行排序
  • 对象交换,两vector容器中元素类型不同时不能交换
	vecrot<int> myvt1;
	vecrot<int> myvt2;
	myvt1.swap(myvt2);		//注意仅myvt1的内容发生变化
	swap(myvt1, myvt2);		//都发生变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值