C ++“copy”导致异常,而暴力工作正常

时间:2013-04-04 07:28:45

标签: c++ copy

我想将一些int向量的值放入C ++ VS2010中的不同int向量中。

起初我尝试了蛮力方式,并且运行良好:

for (int i=iStartPosInDst0based;i<=(iCountSrcItemsToCopy1based);i++)
{
    uIntegers[i]=nInts[i+iFirstItemInSrcToCopy0based];
}

然后我想要更复杂一些并尝试使用“复制”。

copy(nInts.begin()+iFirstItemInSrcToCopy0based, uIntegers.begin()+iCountSrcItemsToCopy1based+iFirstItemInSrcToCopy0based, uIntegers.begin() +iStartPosInDst0based);

但“复制”崩溃。

我确信我的“复制”版本与我的“强力”版本相同,但显然不是。但我不知道我哪里出错了。请问有人帮忙吗?

4 个答案:

答案 0 :(得分:2)

这是因为你打电话

copy(nInts.begin() + ..., uIntegers.begin() + ..., uIntegers.begin() + ...);

第二个迭代器应该是nInts之一,如此

copy(nInts.begin() + ..., nInts.begin() + ..., uIntegers.begin() + ...);

答案 1 :(得分:2)

您以错误的顺序向copy提供参数。原型是

std::copy(InIt first, InIt last, OutIt result)

请改为尝试:

std::copy(
  nInts.begin() + iFirstItemInSrcToCopy0based
  , nInts.begin() + iFirstItemInSrcToCopy0based + iCountSrcItemsToCopy1based
  , uIntegers.begin() + iStartPosInDst0based
);

如果您有权访问C ++ 11,您应该更喜欢std::copy_n,因为您有要复制的元素数量:

std::copy_n(
  nInts.begin() + iFirstItemInSrcToCopy0based
  , iCountSrcItemsToCopy1based
  , uIntegers.begin() + iStartPosInDst0based
);

答案 2 :(得分:0)

我认为您忘记在iStartPosInDst0based的第一个迭代器参数中添加copy

copy(nInts.begin()+iStartPosInDst0based+iFirstItemInSrcToCopy0based, uIntegers.begin()+iCountSrcItemsToCopy1based+iFirstItemInSrcToCopy0based, uIntegers.begin() +iStartPosInDst0based);

答案 3 :(得分:0)

正如cplusplus.com

所述
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);

Output iterator to the initial position in the destination sequence.
This shall not point to any element in the range [first,last).

这似乎就是这种情况,因为你的最后一个参数与你的第二个参数(uIntegers)类似。

所以它应该像

copy(nInts.begin()+ ..., nInts.begin()+ ..., uIntegers.begin() + );

请参阅here以供参考。