编了一个以向量做参数的函数,不知道错在哪里……
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int f();
int main()
{
ifstream in("abc.txt");
vector<int> a;
for(int i;in>>i;)
a.push_back(i);
int f(a);
for(i=0;i<a.size();++i)
cout<<a[i]<<"\t";
return 0;
}
int f(vector<int>& a)
{
int t;
int s[20];
for(int i=0;i<a.size();++i)
a[i]=a[i]*a[i];
for(i=0;i<a.size();++i)
for(int j=0;j<a.size()-i;++j)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
return 0;
}
我把从文件abc.txt的几个数读入到向量中,并想设计一个函数,以该向量为参数,将向量中的数据按各位数字之平方和的大小排序,却遇到了点问题。请前辈指点!
[解决办法]
函数声明与调用有错。
f函数中i变量有问题。
好好看看书,自己动手改改吧,
[解决办法]
概括起来,有以下几个问题:
1、int f(a);这句,是定义一个叫f的int值,你应该把int去掉,改成f(a),否则应该编译不过。
2、既然用到stl,那么就应该尽量用它的工具,比如排序的时候直接用slt中的sort,不用自己写冒泡
3、遍历vector的时候,最好用迭代器,安全而且快
4、吹毛求疵点,a[i]=a[i]*a[i];这句可能会导致溢出。
[解决办法]
#include<iostream>#include<fstream>#include<vector>using namespace std;int f(vector<int>& a){ int t,i; for(i=0;i<a.size();++i) //int i ->i a[i]=a[i]*a[i]; for(i=0;i<a.size();++i) for(int j=0;j<a.size()-i-1;++j) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } return 0;}int main(){ ifstream in("abc.txt"); vector<int> a; int i;//add for(;in>>i;) a.push_back(i); int result = f(a); //add result for(i=0;i<a.size();++i) cout<<a[i]<<"\t"; return 0;}
[解决办法]
你代码问题较多,干脆写了一个,供参考。
#include <iostream>#include <vector>#include <iterator>#include <algorithm> //各位数字的平方和long sum_of_cubic(int n){ long sum = 0; while(n) { div_t d = div(n, 10); sum += d.rem *d.rem; n = d.quot; } return sum;}bool compare_sum_of_cubic(int a, int b){ return sum_of_cubic(a) < sum_of_cubic(b);}int main (){ std::vector<int> data; //从std::cin输入,若从文件输入,用重定向即可, 比如 test.exe < abc.txt 将从文件中abc.txt中读数据 std::istream_iterator<int> start(std::cin); std::istream_iterator<int> end; //用迭代器输入数据 std::copy(start, end, std::back_inserter(data)); //不用自己写函数了,std::sort就是给容器排序的,只需要提供排序算法 std::sort(data.begin(), data.end(), &compare_sum_of_cubic); return 0;}