0

我想将 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

4 回答 4

2

这是因为你打电话

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

第二个迭代器应该是nInts这样的

copy(nInts.begin() + ..., nInts.begin() + ..., uIntegers.begin() + ...);
于 2013-04-04T07:31:00.210 回答
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
);
于 2013-04-04T07:36:28.643 回答
0

我认为您忘记将iStartPosInDst0based第一个迭代器参数添加到copy

copy(nInts.begin()+iStartPosInDst0based+iFirstItemInSrcToCopy0based, uIntegers.begin()+iCountSrcItemsToCopy1based+iFirstItemInSrcToCopy0based, uIntegers.begin() +iStartPosInDst0based);
于 2013-04-04T07:31:02.087 回答
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() + );

请参阅此处以供参考。

于 2013-04-04T07:33:55.740 回答