1

ベクトルのベクトルを参照渡ししようとしています。データ型をタイプ定義しましたが、参照ではなくコピーを取得しているようです。ここでやりたいことを行うための有効な構文を見つけることができませんでした。提案?

#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)
{

}
4

1 に答える 1

1

あなたの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> >&、オリジナルへの参照が使用されます。

問題の範囲に違いはありませんが、単純に 1 次元ベクトルを使用することを検討してください。この方法で、メモリの割り当て、割り当て解除、およびルックアップを少し節約できます。あなたが使用するだろう:

point_grid[width * MAX_HEIGHT + height] // instead of point_grid[width][height]
于 2012-09-06T20:13:53.930 に答える