1

私はC ++とプログラミング全般に不慣れです。私のコードに関するヒント、ヒント、または提案を自由に残してください!!

double をベクターから配列にコピーしようとしています。私は使用 copy()しましたが、最後の要素を除くすべての要素をコピーしています。したがって、配列の最後の要素は、コピーを使用する前とまったく同じままです。そのため、配列内の要素の合計を追加しようとすると、正しい合計が得られません。

これが私のコードです:

vector<double> myVector; 
double myArray[4];
double myDouble = 0.0;

    ...//(add elements to vector)

    copy(&myVector[0], &myVector[4], myArray);

for(int i = 0; i < 4; i++)
{
    myDouble += myArray[i];
    if(i == 4)
        cout << "The sum of your values is " << fixed << setprecision(2) << myDouble << endl;
}

ありがとうございました!もっと具体的に言う必要がある場合はお知らせください。

4

3 に答える 3

4

std::copy()4 つの要素をコピーする呼び出し。これはあなたの配列を満たすようです。配列には正確に 4 つの要素が含まれており、最後の有効なインデックスは であることに注意してください3。あなたのベクターmyVectorには少なくとも 5 つの要素が含まれているようです: 5 つ未満の要素が含まれている場合、式myVector[4]は不正です。とは言っても、シーケンス内の終了イテレータは、常にシーケンスの最後の値の後ろの要素を参照します。つまり、シーケンスは半分開いています。開始が含まれ、終了は含まれていない最初の要素です。

とはいえ、おそらく次のようにコピーする必要があります。

std::copy(myVector.begin(), std::min(4, myVector.size()) + myVector.begin(), myArray);

もちろん、実際に使用するベクトル内の要素の合計を取得するには

double sum = std::accumulate(myVector.begin(), myVector.end(), 0.0);
于 2012-10-18T17:20:01.610 に答える
3

この方法で、ベクターからすべての要素をコピーします。

copy(myVector.begin(), myVector.end(), myArray);
于 2012-10-18T17:17:44.773 に答える
0

あなたはこのコードを持っています:

copy(&myVector[0], &myVector[4], myArray);

4 つの要素をコピーします。これで、宛先配列の宣言ができました。

double myArray[4];

したがって、配列には 4 つの要素があります。

最後の element 以外をすべてコピーしたいようですので、3 つの要素だけをコピーします。

copy(&myVector[0], &myVector[3], myArray);
于 2012-10-18T17:20:49.347 に答える