- 论坛徽章:
- 0
|
一段STL模版的代码(C++),属于书写错误。现结贴!!
C++标准库中已经提供了 max()函数的实现,不需要你自己再定义。因此,你应该把第7、8行的代码去掉。
至于10-12行的代码只是对 max_element() 函数的一个简单的包装。这种情况下,你不应该使用和标准库中的函数同名的函数,用另外的函数名对这个函数进行命名。另外,我认为与其使用你这个函数,还不如直接使用max_element()函数直观和简单些。
对于14-16行的代码同上:不要使用max命名自定义函数,用另外一个函数名;或者把这些代码从程序中去除,直接使用max_element()函数。
你代码中的算法很奇怪。比如,ivec和iarray存储的是相同的整数序列,因此max(ivec)和max(iarray,7)即ivec中的最大值和iarray中的最大值是相同的。既然如此,还有必要再比较这两个最大值哪个更大吗?不过,如果你只是为了测试你写的max()函数的话我倒无话可说。
程序中还存在着一处错误:sarray中明明只有6个数组元素,你在下面却这样用sarray初始化svec:vector<string>; svec(sarray,sarray+7);。这一句中的“7”应该改为6才对吧。要细心一点。
按照我的理解,你的程序可以作如下改写(不使用自定义的max()之类的函数。在你这个题目中完全没有必要自定义max,使用C++标准库提供的函数即可)。你可以跟你的程序比较一下,看哪一个更简洁好用些。
- #include <iostream>;
- #include <string>;
- #include <vector>;
- #include <algorithm>;
- using namespace std;
- int main()
- {
- string sarray[]={"we", "were", "her", "pride", "of", "course"};
- // vector<string>; svec(sarray,sarray+7);
- vector<string>; svec(sarray,sarray+6);
- int iarray[]={2, 3, 55, 6, 7, 88, 45};
- vector<int>; ivec(iarray,iarray+7);
- float farray[]={2.5, 3.5, 33.2, 5.6, 45, 7.9};
- vector<float>; fvec(farray,farray+6);
- // int imax = max(max(ivec),max(iarray,7));
- // 按照上一句的算法,可实现如下:
- int imax = max( *max_element(ivec.begin(), ivec.end()),
- *max_element(iarray, iarray+7) );
- // 其实,上面的算法是不必要的,简单地如下实现即可:
- // int imax = *max_element(ivec.begin(), ivec.end());
- // 下面的求最大值的方法采取上面的后一种方法来实现
- // float fmax = max(max(fvec),max(farray,7));
- float fmax = *max_element(fvec.begin(), fvec.end());
- // string smax = max(max(svec),max(svec,6));
- string smax = *max_element(svec.begin(), svec.end());
- cout << "imax should be -- found: " << imax << endl;
- cout << "fmax should be -- found: " << fmax << endl;
- cout << "smax should be -- found: " << smax << endl;
- }
复制代码 |
|