Я имею deque и хочу iter это назад. Мне также нужен индекс (иначе я бы использовал reverse_iterator), поэтому я попытался:
if ( _children.size( ) > 0 ) // debugging purpose
{
unsigned si( _children.size( ) ); // debugging purpose
int s( _children.size( ) - 1 ); // debugging purpose
for ( unsigned c ( 0 ) ; c < _children.size( ) ; ++c )
if ( this->_children[ ( _children.size( ) - 1 ) - c ]->Topmost( ) &&
this->_children[ ( _children.size( ) - 1 ) - c ]->BorderRectangle( ).IsIn( X , Y ) )
return std::pair< int, WindowPointer >( ( _children.size( ) - 1 ) - c, this->_children[ ( _children.size( ) - 1 ) - c ]->WindowAt( x, y ) );
но я получаю сигсев. После отладки я получаю, что индекс был -65. Я проверил _children.size () по
unsigned si = _children.size( );
и это 4294967232. И
long s = _children.size( ) - 1;
это -65. Как я могу получить такие значения? И как это исправить?
Вы должны использовать reverse_iterator
, Если вы хотите отслеживать индекс, вы можете добавить переменную в цикл for следующим образом:
int counter = 0;
for (xx::reverse_iterator it = yy.rbegin(); it != yy.rend(); ++it, ++counter) {
// Do something
}
Это менее подвержено ошибкам, чем то, что вы делаете.
Возможно, вы получите эти странные значения, потому что в вашем коде есть ошибка.
Вы можете использовать обратный итератор и получить индекс, как это
for (T::reverse_iterator i = x.rbegin(); i != x.rend(); ++i)
{
size_t index = i.base() - x.begin();
// Do something
}
Базовый метод обратного итератора возвращает соответствующий прямой итератор, вычтя x.begin () из этого, и у вас есть индекс.