Негативный или негабаритный stl deque?

Я имею 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. Как я могу получить такие значения? И как это исправить?

0

Решение

Вы должны использовать reverse_iterator, Если вы хотите отслеживать индекс, вы можете добавить переменную в цикл for следующим образом:

int counter = 0;
for (xx::reverse_iterator it = yy.rbegin(); it != yy.rend(); ++it, ++counter) {
// Do something
}

Это менее подвержено ошибкам, чем то, что вы делаете.

3

Другие решения

Возможно, вы получите эти странные значения, потому что в вашем коде есть ошибка.

Вы можете использовать обратный итератор и получить индекс, как это

for (T::reverse_iterator i = x.rbegin(); i != x.rend(); ++i)
{
size_t index = i.base() - x.begin();
// Do something
}

Базовый метод обратного итератора возвращает соответствующий прямой итератор, вычтя x.begin () из этого, и у вас есть индекс.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector