我在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();
}
}
答案 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_back
和push_front
这样的双击函数,它们只需要你想要放置在双端队列前面或后面的对象。