0

我有双端队列并想向后迭代。我还需要索引(否则我会使用 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 ) );

但我得到一个 sigsev。调试后我得到那个索引是-65。我检查了 _children.size()

unsigned si = _children.size( );

它是 4294967232。和

long s = _children.size( ) - 1;

是-65。我如何获得这样的价值观?以及如何解决这个问题?

4

2 回答 2

3

你应该使用reverse_iterator. 如果要跟踪索引,可以像这样在 for 循环中添加一个变量:

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

这比你正在做的更不容易出错。

于 2012-10-20T10:02:40.770 回答
0

可能你得到这些奇怪的值是因为你的代码中有一个错误。

您可以使用反向迭代器并获取索引,如下所示

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

反向迭代器的基本方法返回相应的正向迭代器,从中减去 x.begin() 并获得索引。

于 2012-10-20T10:11:57.190 回答