Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377078
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: C/C++

2008-11-27 09:41:37

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
阅读(3323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~