这可能是一个简单的解决方案,但我对编程还不熟悉,它说我的ivec是未声明的。下面是说明和我的代码:
这是我的密码
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
//prototype
double mean(vector<int> & data);
int main()
{
const int SIZE = 10;
vector<int> ivec(SIZE);
int srand(time(0));
double m;
for(int i = 0; i < ivec.size(); i++)
{
ivec[i] = rand() % 99 + 1;
}
m = mean(ivec);
for(int i = 0; i < ivec.size(); i ++)
{
ivec[i] = ivec[i] - mean;
}
return 0;
}
double mean(vector<int> & data)
{
double dSum = 0;
for(int i = 0; i < ivec.size; i++)
{
dSum += data[i];
}
return dSum/ivec.size;
}上面写着我的爱维克是未申报的,所以我怎么申报。我很感谢你的帮助
发布于 2014-02-18 18:57:19
您的mean函数的参数称为data,因此您需要使用:
double mean(const vector<int>& data)
{
double dSum = 0;
for(int i = 0; i < data.size(); i++)
{
dSum += data[i];
}
return dSum/data().size;
}还请注意,size是一个成员函数,因此您需要以size()的形式调用。而且,向量应该通过const引用传递,因为它没有被修改。
注意:计算平均值的一种惯用方法是使用std::accumulate
if (!ivec.empty())
{
double mean = std::accumulate(ivec.begin(), ivec.end(), 0.0)/ivec.size();
}发布于 2014-02-18 19:22:50
函数平均值有几个错误。首先,std::vector没有具有名称大小的数据成员。它有一个具有名称大小的成员函数。所以,而不是例如表达式
ivec.size一定有
ivec.size()第二个错误是,您必须使用名称数据来代替nane ivec,因为在这个函数中没有声明名称ivec。
所以这个函数应该看起来像
double mean( const vector<int> &data )
{
double dSum = 0.0;
for ( std::vector<int>::size_type i = 0; i < data.size(); i++ )
{
dSum += data[i];
}
return ( data.size() == 0 ? 0.0 : dSum / data.size() );
}我将参数的类型更改为const vector<int> &,因为向量本身在函数中没有更改。
更好的办法是用普通的语句来代替基于范围的语句。在本例中,函数将如下所示
double mean( const vector<int> &data )
{
double dSum = 0.0;
for ( int x : data ) dSum += x;
return ( data.size() == 0 ? 0.0 : dSum / data.size() );
}这两种说法
double dSum = 0.0;
for ( int x : data ) dSum += x;实际上与标准算法std::accumulate的主体相对应。
这样您就可以编写(前提是包含了头<numeric>)
#include <numeric>
//...
double mean( const vector<int> &data )
{
double dSum = std::accumulate( data.begin(), data.end(), 0.0 );
return ( data.size() == 0 ? 0.0 : dSum / data.size() );
}同时也要考虑到你的程序不能完全满足任务。在作业中有书面的
Query the user for a size.
Create a vector of the size specified by the user.同样在这个循环之后
for(int i = 0; i < ivec.size(); i ++)
{
ivec[i] = ivec[i] - mean;
}我认为您应该输出向量,以显示其元素的新值。
https://stackoverflow.com/questions/21862850
复制相似问题