负面或超大的stl deque?

时间:2012-10-20 09:56:56

标签: c++ indexing deque

我有deque并希望向后倾斜。我还需要索引(否则我会使用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。我如何获得这样的价值?以及如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

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

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