1

我是 C++ 和一般编程的新手。随时留下关于我的代码的任何提示、提示或建议!

我正在尝试将我的双打从一个向量复制到一个数组。我使用 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 个元素,最后一个有效索引是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个元素。

似乎您想复制除最后一个元素之外的所有元素,因此只复制 3 个元素:

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