1387: Vector类模版改错Time Limit: 1 Sec Memory Limit: 65535 MB 64bit IO Format: %lldSubmitted: 1118 Accepted: 680 [Submit][Status][Web Board] Description下面程序段有5行有问题,请找出错误所在行,并改正。更正后的程序段输出结果为: 0149162536496481
#include<iostream>
using namespace std;
template<class T,int N=100>
class Vector
{
T vec[N];
public:
void set(int pos,T val);
T get(int pos);
}
template<class T>
void Vector<T>::set(int pos,T val)
{
vec[pos]=val;
}
template<class T>
double Vector<T>::get(int pos)
{
return vec[pos];
}
int main()
{
Vector<double,10>v;
int i=0;
double d=0.0;
for(i=0;i<10;i++)
v.set(i,double(i*i));
for(i=0;i<10;i++)
cout<<v.get(i);
cout<<endl;
return 0;
}
|
就这个题而言, 我推荐两种方法
由于这个题, 只有一组数据, 直接输出就好。 这个方法比较取巧, 但确实很简单。 1 #include<cstdio> 2 int main(){ 3 printf("0149162536496481\n"); 4 return 0; 5 } |
第二种就是老老实实的改 1 #include<iostream> 2 using namespace std; 3 4 template<class T,int N=100> 5 class Vector 6 { 7 T vec[N]; 8 public: 9 void set(int pos,T val); 10 T get(int pos); 11 }; //原代码此处没有分号, 记得加上 12 13 template<class T, int N> //参数少了一个, 把N加上, 只需要初始化一次就好 14 void Vector<T, N>::set(int pos, T val)//同样少了一个N 15 { 16 vec[pos]=val; 17 } 18 19 template<class T, int N> //还是少了一个N, 这就是这个坑的地方了, 你以为下面是对的, 参考下面改上面, 错了 20 //参考上面改下面, 还是错的, 对于新手, 简直要命<_<!!! 21 T Vector<T, N>::get(int pos) //这里要和函数声明时的一样, 把返回值改一下就好 22 { 23 return vec[pos]; 24 } 25 26 int main() 27 { 28 Vector<double,10>v; 29 int i=0; 30 for(i=0;i<10;i++) 31 v.set(i,double(i*i)); 32 for(i=0;i<10;i++) 33 cout<<v.get(i); 34 cout<<endl; 35 return 0; 36 } 或者你也可以这样, 直接把函数写在类里面, 如果是学习新知识则推荐上一种, 如果知识点熟练的话, 推荐第一种。 1 #include<iostream> 2 using namespace std; 3 4 template<class T,int N=100> 5 class Vector 6 { 7 T vec[N]; 8 public: 9 void set(int pos,T val){ 10 vec[pos]=val; 11 } 12 T get(int pos){ 13 return vec[pos]; 14 } 15 }; 16 17 int main() 18 { 19 Vector<double,10>v; 20 int i=0; 21 for(i=0;i<10;i++) 22 v.set(i,double(i*i)); 23 for(i=0;i<10;i++) 24 cout<<v.get(i); 25 cout<<endl; 26 return 0; 27 } |