我是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;
}
谢谢!如果我需要更具体,请告诉我。
答案 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);