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;
        }
    }
}

如果我应该使用std::reverse_iterator和使用std::vector::begin(),我有点困惑std::vector::end()std::swap(x)因为添加元素std::vector<swcObject*> objects是通过向后(?)。它可以工作,但我的代码对这种事情安全吗?

4

1 回答 1

0

i是一个反向迭代器的事实没有任何区别。如果你想i用向量的第一个值交换值,你应该做你正在做的事情。另请注意,返回的迭代器end()位于向量中的最后一个元素之后,并且永远不应取消引用。

于 2013-07-06T05:47:48.000 回答