我需要从迭代器的某个位置向后读取一个向量,并在dictionnary数组中放入n1个值。
我虽然做了一个循环并减少了迭代器,但由于某些原因,我陷入了无限循环。
我认为在这段时间内存在问题吗?
//I read all the vSignal vector
while (vSignalIt != vSignal.end()) {
i = 0;
vSignalIt2 = vSignalIt;
//Filling the dictionnary array
if (vSignalIt != vSignal.begin()) {
do
{
dictionnary[i] = *vSignalIt2;
vSignalIt2--;
i++;
} while (vSignalIt2 != vSignal.begin() || i < (uint8_t)n1);
}
//Do something with the value of dictionnary and increase vSignalIt to advance forward in the vSignal vector
}
答案 0 :(得分:2)
更改'||'到'&amp;&amp;'
答案 1 :(得分:0)
您的声明使用了错误的条件检查程序。目前它是:
while (vSignalIt2 != vSignal.begin() || i < (uint8_t)n1);
但它应该是:
while (vSignalIt2 != vSignal.begin() && i < (uint8_t)n1); //<-- && means 'and'
此外,作为建议,您应该使用reverse_iterator
,因为它是为此目的而构建的。
答案 2 :(得分:0)
您可能需要考虑使用标准算法:
auto vSignalIt = vSignal.rbegin(); // or some other reverse iterator
auto n = std::min(n1, std::distance(vSignalIt, vSignal.rend());
std::copy_n(vSignalIt, n, std::back_inserter(dictionary));