1) QVector のポインタを関数に渡してから、それを処理したいと考えています。私はこれを試しました:
void MainWindow::createLinearVector(QVector<float> *vector, float min, float max )
{
float elementDiff=(max-min)/(vector->size()-1);
if(max>min) min -= elementDiff;
else min += elementDiff;
for(int i=0; i< vector->size()+1 ; i++ )
{
min += elementDiff;
*(vector+i) = min; //Problematic line
}
}
ただし、コンパイラは 、行の「演算子 = に一致しません」*(vector+i) = min;
と表示します。QVector でこのようなアクションを実行する最良の方法は何でしょうか?
2) 関数は、たとえば vector(a:b:c) のように、matlab : 演算子が機能する方法で、プロットのベクトルに値を線形に分配することになっています。Qtでそのようなことを実行する最も簡単で最良の方法は何ですか?
編集:
ここからの助けを借りて、最初の問題は解決されます。:)
メソッド自体も改善しました。上記のような複数の加算の代わりに線形補間を使用することで、精度を大幅に向上させることができます。多重加算では誤差が蓄積されますが、これは線形補間によって大部分除去されます。
ちなみに最初の関数のif文は不要だったので、倍加法でもちょっと手を加えるだけで消すことができました。
void MainWindow::createLinearVector(QVector<double> &vector, double min, double max )
{
double range = max-min;
double n = vector.size();
vector[0]=min;
for(int i=1; i< n ; i++ )
{
vector[i] = min+ i/(n-1)*range;
}
}
これにはエンチャントされたループを使用することを検討しましたが、より実用的でしょうか? たとえば、 foreach ループでは、補間のためにいくつかの変数をインクリメントする必要がありますか? また、最初の要素をスキップするための条件を作成しますか?