如何在程序周围传递数据而不每次都复制数据?

具体来说,在调用sim(ohlc)时,我只想传递指针引用,而不希望将数据复制到函数中。

这是我制作的程序,但是我不确定这是执行该程序的最佳方法(特别是在速度和内存使用方面)。

我想我没有像我应该的那样传递指向sim(ohlc)的指针,但是如果我尝试sim(&ohlc),我不知道如何更改sim函数以接受它。

   struct ohlcS {
        vector<unsigned int> timestamp;
        vector<float> open;
        vector<float> high;
        vector<float> low;
        vector<float> close;
        vector<float> volume;
    } ;


ohlcS *read_csv(string file_name) {
    // open file and read stuff
    if (read_error)
        return NULL;
    static ohlcS ohlc;
    ohlc.timestamp.push_back(read_value);
    return &ohlc;
}

int sim(ohlcS* ohlc) {
    // do stuff
    return 1;
}


main() {
    ohlcS *ohlc = read_csv(input_file);
    results = sim(ohlc);
}

最佳答案

它是C ++,请使用参考。这是安全的,因为您返回了静态对象。

static ohlc ohlc_not_found;

ohlc &read_csv(string file_name) {
    // open file and read stuff
    if(error_while_opening)
    {
        return ohlc_not_found;
    }
    static ohlc loc_ohlc;
    loc_ohlc.timestamp.push_back(read_value);
    return loc_ohlc;
}

int sim(const ohlc& par_ohlc) {
    // do stuff
    return 1;
}

....
 ohlc& var_ohlc = read_csv(input_file);
 if(var_ohlc == ohlc_not_found)
 {
      // error handling
      return;
 }
 results = sim(var_ohlc);


如果要在sim中修改par_ohlc,请不要将其设为const。

并且不建议在类名和变量名中都使用ohlc :(

关于c++ - 传递指向函数的指针而不复制它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21308748/

10-13 03:00