如果矢量具有奇數個元素,則advance
調用將嘗試將迭代器推進超過矢量的末尾。這是未定義的行爲。
一個解決它的方法是使用標準的advance
下面的修改(我限制前進方向,以節省自己工作)[未測試的代碼]:
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance,
std::random_access_iterator_tag)
{
if ((end - it) < distance)
it += distance;
else
it = end;
}
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance,
...)
{
while (it != end && distance > 0)
{
++it;
--distance;
}
}
template<typename Iterator>
void limited_advance(Iterator& it, Iterator end, unsigned distance)
{
limited_advance(it, end, distance,
typename std::iterator_traits<Iterator>::iterator_category());
}
,然後用limited_advance(it, myVec->end(), 2)
替換advance(it,2)
。
你試過** it ++嗎?並且「_以下不爲我工作」爲什麼它不工作? –
它打印出一些元素,然後垃圾或它根本不工作? –
@ bhuvan-venkatesh第一個印好元素,第二個完全不印。即使我之後在循環之外打印某些東西,它也不會被打印出來。FirstStep,我不知道,當我使用它時不會打印任何東西。 –