0

を使用して(抽象基本クラス)std::vectorのタイプを持つプログラム内で反復したいこの状況があります。swcObject*std::iterators

コード:

class swcObject    // abstract class
{
protected:
    // inheritable members
    // some are pure virtual functions()
    // ...
public:
    int x, y, width, height;
    // getter/setter
private:
    // implicit task()
}

std::vector<swcObject*> objects;

void other::OnClickSwapObject()
{

    for (auto i = objects.rbegin(); i != objects.rend(); ++i)
    {
        if ((*i)->isClick(MOUSE_BUTTON_LEFT))
        {
            std::swap(*i, *objects.begin()); // is this the right syntax to do it?
            break;
        }
    }
}

要素を追加するのは逆方向(?)であるため、 orを使用std::reverse_iteratorして使用する必要がある場合、少し混乱します。それは機能していますが、私のコードはこの種のことに対して安全ですか?std::vector::begin()std::vector::end()std::swap(x)std::vector<swcObject*> objects

4

1 に答える 1

0

i逆イテレータであるという事実は違いはありません。iat の値をベクトルの最初の値と交換したい場合は、現在行っていることを行う必要があります。また、によって返されるイテレータはend()、ベクターの最後の要素の後にあり、逆参照してはならないことに注意してください。

于 2013-07-06T05:47:48.000 に答える