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

发布于 2024-10-28 11:53:53 字数 519 浏览 7 评论 0原文

我在此处的 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();
    }
}

I'm getting an error on the insert() part here, and I dunno what I am doing wrong. I've tried different parameters and number of parameters but nothing seems to work.

m_oGameObjectList is a deque of IGameObjects (base class).
m_sPosition is a struct with 3 ints (X, Y, Z).
gameObject is the reference to an object derived from 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();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寒尘 2024-11-04 11:53:54

insert 采用一个迭代器。使用:

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

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

insert takes an iterator. Use:

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

You'll also need to use pointers in your deque, right now you're slicing - inserting a copy of the IGameObject part of gameObject

余生共白头 2024-11-04 11:53:54

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

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

...尽管还有其他几种同样有效的解决方案。

您还可以使用像 push_backpush_front 这样的双端队列函数,它们只分别获取要放在双端队列前面或后面的对象。

Your call to insert should pass an iterator (not an integer index) into the deque. One way you can convert an integer index to a deque iterator is via:

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

... though there are several other solutions that work equally well.

You can also use deque functions like push_back and push_front which just take the object you want to put at the front or back of the deque, respectively.

懷念過去 2024-11-04 11:53:54

尝试将从 IGameObject 派生的对象插入到 deque中;不起作用,因为双端队列试图在引用中存储对象的副本,而不是引用本身。

大多数时候,如果您尝试将类层次结构存储到容器中,则可以通过使用指向基类的指针的容器来实现。

trying to insert an object derived from IGameObject into a deque<IGameObject> won't work as the deque is trying to store a copy of the object in the reference, not the reference itself.

Most of the time, if your trying to store an class hiearchy into a container, you do so by having the container of pointers to the base class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文