(C ++)无法让deque insert()工作,我做错了什么?

时间:2011-03-31 16:48:20

标签: c++ insert deque

我在insert()部分收到错误,我不知道我做错了什么。我尝试了不同的参数和参数数量,但似乎没有任何效果。

m_oGameObjectList是IGameObjects(基类)的双端队列 m_sPosition是一个包含3个整数(X,Y,Z)的结构 gameObject是对从IGameObject派生的对象的引用。

for (int i = 0; i < m_oGameObjectList.size(); i++)
{
    if (gameObject.m_sPosition.Z > m_oGameObjectList[i].m_sPosition.Z)
    {
        m_oGameObjectList.insert(i, gameObject);
        i = m_oGameObjectList.size();
    }
}

3 个答案:

答案 0 :(得分:3)

insert需要iterator。使用:

m_oGameObjectList.insert(m_oGameObjectList.begin() + i, gameObject);

您还需要在deque中使用指针,现在您正在切片 - 插入IGameObject gameObject部分的副本

答案 1 :(得分:0)

尝试将从IGameObject派生的对象插入deque&lt; IGameObject&gt;当deque试图将对象的副本存储在引用中而不是引用本身时,它不会工作。

大多数情况下,如果你试图将一个类层次结构存储到一个容器中,你可以通过指向基类的指针容器来实现。

答案 2 :(得分:0)

您对insert的调用应该将迭代器(不是整数索引)传递给双端队列。将整数索引转换为deque迭代器的一种方法是通过:

my_deque_iterator iter = m_oGameObjectList.begin();
std::advance(m_oGameObjectList, i);

......虽然还有其他几种解决方案同样有效。

你也可以使用像push_backpush_front这样的双击函数,它们只需要你想要放置在双端队列前面或后面的对象。