通过引用传递向量的typdef向量

Passing a typdef vector of vectors by reference

本文关键字:向量 typdef 引用      更新时间:2023-10-16

我正试图通过引用传递一个向量。我已经输入了数据类型,在我看来,我得到的是一个副本,而不是引用。我在这里找不到任何有效的语法来做我想做的事情。建议?

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
#define __DEBUG__
using namespace std;
//Define custom types and constants
typedef std::vector< std::vector<float> > points;
//Steup NAN
float NaN = 0.0/0.0;  //Should be compiler independent
//Function prototypes
void vectorFunction(float t0, float tf,  points data );
//Global constants
string outFilename = "plotData.dat";
int sampleIntervals = 10000; //Number of times to sample function.
int main()
{
    ofstream plotFile;
    plotFile.open(outFilename.c_str());
    points data;
    vectorFunction( 0, 1000, data );
#ifdef __DEBUG__
    //Debug printouts
    cout << data.size() << endl;
#endif
    plotFile.close();
    return 0;
}
void vectorFunction(float t0, float tf, points data )
{
    std::vector< float > point(4);
    float timeStep = (tf - t0)/float(sampleIntervals);
    int counter = floor(tf*timeStep);
    //Resize the points array once.
    for( int i = 0; i < counter; i++)
    {
        point[0] = timeStep*counter;
        point[1] = pow(point[0],2);
        point[2] = sin(point[0]);
        point[3] = -pow(point[0],2);
        data.push_back(point);
    }
#ifdef __DEBUG__
    //Debug printouts
    std::cout << "counter: " << counter
              << ", timeStep: " << timeStep
              << ", t0: " << t0
              << ", tf: " << tf << endl;
    std::cout << data.size() << std::endl; 
#endif
}
void tangentVectorFunction(float t0, float tf, points data)
{
}

假设您的typedef仍然存在:

typedef std::vector< std::vector<float> > points;

您的参考传递原型如下所示:

void vectorFunction(float t0, float tf, points& data);
void tangentVectorFunction(float t0, float tf, points& data);

您的points类型只是一个值类型,它等效于std::vector< std::vector<float> >。对这样一个变量的赋值会产生一个副本。将其声明为引用类型points&(或std::vector< std::vector<float> >&)将使用对原始文件的引用。

这当然不会对你的问题范围产生影响,但你可以考虑简单地使用一维向量。通过这种方式,您可以节省一点内存分配、释放和查找。你会使用:

point_grid[width * MAX_HEIGHT + height] // instead of point_grid[width][height]