一个程序,它制作一个至少有 30 个负元素和正元素的双向量。我还必须有函数来计算/打印向量的标准偏差、平均值、最大值和最小值。接下来,我需要一个split()函数将双向量的值拆分为 2 个新的双向量,positive并且negative(前者将具有 0 - max_positive_value 的所有值,后者将具有所有非零负值)。最后,我需要最后一个函数来显示两个修改后的向量。
我的split()函数没有打印任何内容!出于调试目的,我这样做是为了打印正向量和负向量的所有值,但它什么也不打印。编译器没有提及任何类型的任何错误,这并没有真正的帮助!
double split(const vector<double> &data)
{
vector <double> positive;
vector <double> negative;
int j = 0; // iterate inner
// add to pos/neg vector depending on value of data[i]
for (int i = 0; i < data.size(); ++i)
{
if (data[i] >= 0)
{
positive[j] = data[i];
j++;
} else if (data[i] < 0)
{
negative[j] = data[i];
j++;
}
}
// debugging, print vectors
for (int vC = 0; vC < positive.size(); ++vC)
{
cout << positive[vC] << endl;
}
for (int vC = 0; vC < negative.size(); ++vC)
{
cout << positive[vC] << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <vector>
#include <ctime> // both this and the next header are needed for
#include <cstdlib> // rand() to randomly generate numbers
#include <cmath> // sqrt
using namespace std;
// passing by reference uses less resources
double split(const vector<double> &data)
{
vector <double> positive;
vector <double> negative;
int j = 0; // iterate inner
// add to pos/neg vector depending on value of data[i]
for (int i = 0; i < data.size(); ++i)
{
if (data[i] >= 0)
{
positive[j] = data[i];
j++;
} else if (data[i] < 0)
{
negative[j] = data[i];
j++;
}
}
// debugging
for (int vC = 0; vC < positive.size(); ++vC)
{
cout << positive[vC] << endl;
}
for (int vC = 0; vC < negative.size(); ++vC)
{
cout << positive[vC] << endl;
}
return 0;
}
// calculate std deviation
double calculateSD(const vector<double> &data)
{
// calculate sum of data
double sum = 0.0;
for (size_t i = 0; i < data.size(); ++i)
sum += data[i];
// calculate average
double avg = sum / data.size();
// calculate and return the standard deviation
double stdDev = 0.0;
for (size_t i = 0; i < data.size(); ++i)
stdDev += (data[i] - avg) * (data[i] - avg);
return sqrt(stdDev / data.size());
}
int main()
{
// vector with minimum 30 values
vector <double> data (30);
// seed rand() with time
srand (time(NULL));
// fill vector with neg/pos num
for (int i = 0; i < data.size(); ++i)
{
data[i] = rand() - (RAND_MAX / 2);
// cout << data[i] << endl;
}
split(data);
}
Run Code Online (Sandbox Code Playgroud)
注意:我还没有实现所需的最高/最低/平均函数。
你的载体
vector <double> positive;
vector <double> negative;
Run Code Online (Sandbox Code Playgroud)
是空的,因此访问它们的元素是未定义的行为。你需要
if (data[i] >= 0)
{
positive.push_back(data[i]);
} else if (data[i] < 0)
{
negative.push_back( data[i]);
}
Run Code Online (Sandbox Code Playgroud)