[英]Negative or oversized stl 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。 我如何獲得這些價值? 以及如何解決這個問題?
您應該使用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()即可獲得索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.