打印我的矢量不起作用(没有编译器错误)

vsh*_*msi 0 c++ vector

我必须做的:

一个程序,它制作一个至少有 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)

注意:我还没有实现所需的最高/最低/平均函数。