我有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。我如何获得这样的价值?以及如何解决这个问题?
答案 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()并得到索引。