0

私は 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です。どうすればそのような値を取得できますか? そして、これを修正する方法は?

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 に答える