这里使用的是《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,是以当前日期命名
查看文件内容,可以看到如下结果
这与我们平时使用软件时,里面一些记录的文本文件内容格式相似,这种方法对平时我们的软件仿真,记录调试信息,相信都会有一定的帮助。