C++模板类函数的使用以及如何使用时间作为文件名保存文件

       这里使用的是《C++ Primer 3rd版》中练习2.23的解答,首先附上题目:

       已知下面函数声明,请实现出  min()  函数,找出并返回  vec  的最小元素值。请使用两种做法来查访  vec  元素,一是使用  for  循环,整数索引至  vec;二是使用  for  循环和一个 iterator:

                  template <class elemType>
                  elemType
                            min( const vector<elemType> &vec ); 

       下面附上程序,首先要说的是这题的答案参考的是答案书上的代码,但是在这程序里面我加入了文件操作。

      

/*使用for循环和整数索引访问vec元素*/
template<class elemType>elemType	min1(const	vector<elemType>	&vec)
{
	elemType	minimum;
	if (vec.size()>=1)
	{
		minimum = vec[0];
	} 
	else
	{
		throw	"向量是空向量";
	}
	for (int i = 1;i != vec.size();i++)
	{
		if (vec[i] < minimum)
		{
			minimum = vec[i];
		}
	}
	return	minimum;
}

/*使用for循环和iterator访问vec元素*/
template<class elemType>elemType	min2(const	vector<elemType>	&vec)
{
	elemType	minimum;
	vector<elemType>::const_iterator	iter = vec.begin();
	if (iter < vec.end())
	{
		minimum = *iter;
	} 
	else
	{
		throw	"向量是空向量";
	}
	for (iter = vec.begin();iter<vec.end();++iter)
	{
		if (*iter < minimum)
		{
			minimum = *iter;
		}
	}
	return	minimum;
}

    主函数代码

#include <iostream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>
#include <time.h>
#include <fstream>

using namespace std;
int	main()
{
	int	array[] = {0,2,1,3,4,5,-6,7,3,-5};
	//std::vector<int>	a(array,array+10);
	std::vector<string>	a(10);	// 字符串向量初始化?
	a[0] = "hello world";
	a[1] = "AAAAA(按首字母排序)";
	a[2] = "试一试";
	a[3] = "你好";
	a[4] = "C++ Primer";
	a[5] = "字符串比较";
	a[6] = "こにちは";
	a[7] = "吉野家";
	a[8] = "てぷら";
	a[9] = "みんなの日本語";

	std::cout<<"a第一种方法最小值:"<<min1(a)<<std::endl;
	std::cout<<"a第二种方法最小值:"<<min2(a)<<std::endl;

	std::vector<int>	b(array,array+9);
	std::cout<<"b第一种方法最小值:"<<min1(b)<<std::endl;
	std::cout<<"b第二种方法最小值:"<<min2(b)<<std::endl;

	std::vector<int>	c;
	try
	{
		std::cout<<"c第一种方法最小值:"<<min1(c)<<std::endl;
		std::cout<<"c第二种方法最小值:"<<min2(c)<<std::endl;
	}
	catch (char	*s)
	{
		std::cerr<<s<<std::endl;
	}
	/*泛型算法的数组排序算法*/
	sort(a.begin(),a.end());
	cout<<"/******************************************************/"<<endl;
	cout<<"排序结果"<<endl;
	for (vector<string>::iterator	i = a.begin();i != a.end();i++)
	{
		cout<<*i<<endl;
	}
	cout<<"/******************************************************/"<<endl;
	string search_value;
	cout<<"请输入要搜索字符串"<<endl;
	cin>>search_value;
	vector<string>::iterator	result;
	result = find(a.begin(),a.end(),search_value);
	if (result != a.end())
	{
		cout<<"'"<<search_value<<"'"<<"元素存在"<<endl;
	}
	else
	{
		cout<<"'"<<search_value<<"'"<<"未发现"<<endl;
	}

	/*以时间保存文件名*/
	time_t	nowtime = time(NULL);
	struct	tm	*p;
	p = gmtime(&nowtime);
	char	filename[256] = {0};
	char	timeinfo[256] = {0};
	sprintf(filename,"%d-%d-%d.txt",1900+p->tm_year,1+p->tm_mon,p->tm_mday);
	//UTC时,中国是东八区,因此要+8
	sprintf(timeinfo,"%d/%d/%d %d:%02d",1900+p->tm_year,1+p->tm_mon,p->tm_mday,8+p->tm_hour,p->tm_min);
	ofstream	fw(filename);
	fw<<timeinfo<<"最小值是"<<min1(b)<<endl;
}
     运行结果如下图示:

保存文件名称可以看到2013-3-28,是以当前日期命名

查看文件内容,可以看到如下结果

这与我们平时使用软件时,里面一些记录的文本文件内容格式相似,这种方法对平时我们的软件仿真,记录调试信息,相信都会有一定的帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值