C++数据类型——向量(3)
Author:yuexingtian
Date: 2008-11-27 Thursday
//二维向量(2-D Vectors)
//在二维向量中,可以使用vector中的swap操作来交换两个向量。swap操作是专门为提高
//两向量直接互相交换的性能儿设计的。如果用一般的的swap:
//eg:void sawp(vector&a,vector&b)
// {vector temp=a;a=b;b=temp;}
//它涉及向量的创建、赋值、在赋值,最后还要销毁临时向量。但若用vector的swap操作,
//这些工作都可以省掉。只要做微不足道的地址交换工作,岂不美哉?!
//eg:文件yuexingtian.txt中含有一些行,每行中有一些整数,可以构成一个向量。
//整个文件可以看成是一组向量,其中每个元素又都是向量,只不过元素的向量其长度
//参差不齐。设计一个程序,使得按从短到长的顺序输出每个向量:
//=============yuexingtian-->begin==================
//如干个向量按长短排序
//==================================================
#include
#include
#include
#include
using namespace std;
//----------------------------
typedef vector<vector<int> > Mat;
/*<vector<int> >中"> >"之间要有空格,要不就会认为为">>"因为">>"的优先级高。*/
Mat input();
void mySort(Mat &a);
void print(const Mat &a);
//----------------------------
int main()
{
Mat a=input();
mySort(a);
print(a);
return 0;
}
//----------------------------
Mat input()//输入
{
ifstream in ("yuexingtian.txt");
Mat a;
for (string s;getline(in,s);)
{
vector<int> b;
istringstream sin(s);
for(int ia; sin>>ia; )
b.push_back(ia);
a.push_back(b);
}
return a;
}
//----------------------------------
void mySort(Mat &a)//排序
{
for(int pass=1;pass<a.size();++pass)
for(int i=0;i<a.size()-pass;++i)
if(a[i+1].size()<a[i].size())
a[i].swap(a[i+1]);
}
//-----------------------------------
void print(const Mat &a)//输出
{
for(int i=0;i<a.size();++i)
{
for(int j=0;j<a[i].size();++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
//=========================end========================
|
运行结果:
yuexingtian.txt文件:
程序分析:输出print()函数是一个双重循环,它按序将二维向量中的每一个元素(向量)打印出来。且每打印一个向量,就换行。
mySort是排序函数,他按向量元素个的多少进行排序,使用的是“冒泡法“。
排序中所使用的swap就是两个向量相互交换的操作,它在vector中定义。
用typedef来定义Mat这个二维向量的名字,以使程序中是名称易记易用。
2008-11-26
tianyuexing
阅读(3329) | 评论(0) | 转发(0) |