C++ "copy"导致异常,而暴力破解工作正常
C++ "copy" causes exception while brute-force works fine
我想在c++ VS2010中把一个int向量的一些值转换成一个不同的int向量。
一开始我尝试了蛮力的方式,它工作得很好:
for (int i=iStartPosInDst0based;i<=(iCountSrcItemsToCopy1based);i++)
{
uIntegers[i]=nInts[i+iFirstItemInSrcToCopy0based];
}
然后我想更复杂一点,尝试使用"copy"。
copy(nInts.begin()+iFirstItemInSrcToCopy0based, uIntegers.begin()+iCountSrcItemsToCopy1based+iFirstItemInSrcToCopy0based, uIntegers.begin() +iStartPosInDst0based);
但是"copy"崩溃了
我很确定我的"复制"版本和我的"暴力"版本是一样的,但显然不是。但我不知道我哪里错了。有人能帮帮我吗?
这是因为你调用
copy(nInts.begin() + ..., uIntegers.begin() + ..., uIntegers.begin() + ...);
第二个迭代器应该是nInts
的迭代器,像这样
copy(nInts.begin() + ..., nInts.begin() + ..., uIntegers.begin() + ...);
您以错误的顺序给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
);
我想你忘记在第一个迭代器参数中添加iStartPosInDst0based
到copy
:
copy(nInts.begin()+iStartPosInDst0based+iFirstItemInSrcToCopy0based, uIntegers.begin()+iCountSrcItemsToCopy1based+iFirstItemInSrcToCopy0based, uIntegers.begin() +iStartPosInDst0based);
如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() + );
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- C++ "copy"导致异常,而暴力破解工作正常