copy()将除vector之外的所有元素复制到数组c ++

时间:2012-10-18 17:13:08

标签: c++ arrays vector copy

我是c ++和编程的新手。随意留下关于我的代码的任何提示,提示或建议!!

我正在尝试将我的双打从矢量复制到数组。我使用copy()并且它复制了除最后一个之外的所有元素。所以数组中的最后一个元素保持与我使用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;
}

谢谢!如果我需要更具体,请告诉我。

3 个答案:

答案 0 :(得分:3)

以这种方式复制矢量中的所有元素:

copy(myVector.begin(), myVector.end(), myArray);

答案 1 :(得分:3)

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);

答案 2 :(得分:0)

您有以下代码:

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

它复制了4个元素。 现在你有了目标数组的decalaration:

double myArray[4];

所以数组有4个元素。

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

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