簡體   English   中英

負或超大Stl雙端隊列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM