您的位置:首页 > 理论基础 > 数据结构算法

数据结构应用标准模版库STL——向量的操作(对排序后的子表进行排序)

2013-11-24 00:05 323 查看
向量是基于模版的类,它存储相同数据类型的元素。与数组一样的是,向量对象允许通过下标运算符直接访问元素。然而,与数组不同的是,向量保留其大小信息,且提供先关的size()函数,利用此函数可以访问向量的元素个数。向量对象允许在赋值语句任何一边使用下标运算符。

声明向量对象:e.g vector<int> intVector(5)表示长度为5的向量,包含整型数值0.

vector<string> strVector(10);表示长度为10 的向量;每个元素都包含空字符串;

仅用大小参数声明向量类似于数组声明:下面的数组对应向量intVector和strVector

int intArray[5];

string strArray[10];例如:

int intArray[5]={9,5,7,3,4};
int arrsize=sizeof(intArray)/sizeof(int);
vector<int> intVector(intArray,intArray+arrsize);


头文件 <vector>

向量的操作主要有:back();返回向量尾部数据项的数值 back()const;bakck()的常量版本
empty();判断向量是否为空,是返回true,不是返回false push_back();在向量的尾部增加一个数值
pop_back();删除向量尾部的数据项size()const;
返回向量中元素的数目;

下面是一个结合了插入排序和合并向量的例子:



//此函数产生12个随机数
//如果数值小于400,则将数值加到向量vSmall中
//如果400<=数值<700则将数值加到向量vMedium中
//如果700<=数值<=1000则将数值加到向量vMedium中
//对每个向量进行插入排序
//使用join(),使得三个向量连接起来
//vSmall最终成为一个排序好的表,然后输出新的排序表
#include<iostream>
#include<vector>
#include<time.h>
#include<cstdlib>
using namespace std;

template<typename T>  //合并函数模版
void join(vector<T>&vA,const vector<T>&vB)
{
	int i,sizeB=vB.size();
	for(i=0;i<sizeB;i++)  //以下标访问vB中的元素,并用push_back()添加到vA中
		vA.push_back(vB[i]);
}

template<typename T>//打印出向量里所有数据
void writeVector(const vector<T> & v)
{
	int i,vsize=v.size();
	for(i=0;i<vsize;i++)
		cout<<v[i]<<" ";
	cout<<endl;
}

template<typename T>//插入排序模版函数
void insertionSort(vector<T>&v)
{
	int i,j,n=v.size();
	T target;
	for(i=1;i<n;i++)
	{
		j=i;
		target=v[i];
		while(j>0&&target<v[j-1])
		{
			v[j]=v[j-1];
			j--;
		}
		v[j]=target;
	}
		

}

int main()
{	srand((int)time(NULL));  //随机函数初始化时间
	vector<int>vSmall,vMedium,vLarge;
	int i,value;
	for(i=0;i<12;i++)
	{
		value=rand()%900+100;  //产生100到1000之间的随机数
		if(value<400)
			vSmall.push_back(value);  //若小于400,则加到向量vSmall中
		else if(value <700)
			vMedium.push_back(value);   //同理
		else vLarge.push_back(value);  //同理
	}
	insertionSort(vSmall);   //排序由范围在100<=n<400中的整数所组成的向量并输出
	cout<<"Small : ";
	writeVector(vSmall);      
 
	insertionSort(vMedium);		//对vMedium向量进行插入排序
	cout<<"Medium : ";
	writeVector(vMedium);

	insertionSort(vLarge);		//对vLarge向量进行插入排序
	cout<<"Large : ";
	writeVector(vLarge);

	join(vSmall,vMedium);   //将向量vMedium连接到修改后的向量vSmall的末尾
	join(vSmall,vLarge);    //将向量vLarge链接到修改后的向量vSmall的末尾
	cout<<"Sorted : ";	//输出新的向量
	writeVector(vSmall);

	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: