问题标签 [ptr-vector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1472 浏览

c++ - 从 boost::ptr_vector 获取指针而不是引用

我最近发现 boost ptr_vector 对于管理我的堆分配对象集合很有用。指针集合库非常好,但不幸的是,我被一件事拖住了。

我的代码的另一部分需要在 ptr_vector 中显式保存指向我的一个对象的指针(出于特定原因,它不能作为引用)。但是,当您访问 ptr_vector 中的对象时,您会得到一个引用 T&(即使您使用了 ptr_vector.push_back(T *)

无论如何我可以从 boost::ptr_vector 中得到一个普通的指针吗?

0 投票
1 回答
1128 浏览

c++ - 无法制作包含 ptr_vector 的类的向量

我需要一个std::vectorof boost::ptr_vectors。为了使它们的管理更容易,我将 boost::ptr_vector 包含在一个类 ( Zoo) 中,并为其创建了一个 std::vector ( allZoos)。看一个最小的代码来重现这个:

声明allZoos是可以的,但是调用它的任何成员函数都会导致编译器错误:(完整的错误日志太长了,没有贴出来)

这与 boost 的不可复制实用程序类和自定义new_clone函数无关,我尝试了它们但没有运气。那怎么解决?

(我使用的是VS2010)

0 投票
0 回答
1923 浏览

c++ - boost::ptr_vector 问题

我想要一个boost::ptr_vector指向对象的多态指针(这部分大部分都在工作),但是我在使用它的某些功能时遇到了麻烦。

我想加载ptr_vector使用 case 开关来确定要指向的子类型,这样我就不必让多个指针浮动,但是当我覆盖类型时,指针多态地指向它会覆盖其中的所有ptr_vector内容使用相同的指针推送(我认为这与它存储确切的指针有关)我认为可以通过给它对象的副本/克隆而不是指针来解决,但我看不到在哪里,或者如何告诉它如何做到这一点。

我遇到的另一个问题是,当指针存在的范围结束时ptr_vector停止存在的所有对象(我觉得这可以通过解决问题来解决是第 2 段)

我的另一个问题是如何在示例中删除特定对象,ptr_vector例如我发现当其中有 30 多个对象时我需要删除对象 5 ptr_vector(请记住,我将搜索要删除的对象)

编辑:我已经实现了这些clone方法,并且它们工作正常

编辑:示例代码

gameObject(多态类型)

对象管理器(举例说明范围)

主要的

0 投票
1 回答
138 浏览

c++ - boost ptr_vector 处理删除“通过引用”

我的班级有一个指针向量:

并且在一些“设置”方法中向向量添加了一些类:

现在这个类的客户可能希望将他们的 Class 对象添加到这个类列表中:

他们可能希望通过传递相同的指针来删除它们:

现在,如果我理解正确,在阅读了这个答案(https://stackoverflow.com/a/357043/48998)之后,我需要按如下方式实现该方法:

我知道我还必须在从 ptr_vector.release() 返回的 auto_ptr 上再次调用 release()。

我是否正确假设这将确保此方法的调用者(RemoveThing ...)将保留对其 Class 对象的有效引用并且不会被删除?我只是想让 vec 获得临时所有权,然后放弃它。

0 投票
3 回答
332 浏览

c++ - 使用ptr_vector时派生类的访问方法

设置

目标

拥有一个包含两个派生类的对象的向量,然后能够访问特定于子类的方法。

当前的“解决方案”

问题

显然“它”既不被识别为 DerivedA 也不被识别为 DerivedB,因此无法访问子特定方法。需要某种形式的演员表,所以我想问题是:

如何正确地将迭代器转换为正确的派生类?

也许有更好的方法来构建整个场景?

编辑: 似乎我有点不清楚。派生类中方法的目的是根本不同的。考虑具有派生类 Armor 和 Weapon 的基类 Item。

在这个例子中,你可以看到为什么,例如,Weapon 有一个函数 getDamage(),它可能会返回一个浮点数。

Armor不需要此功能,甚至没有类似的功能。

在此示例中,您可以将向量视为可以包含任意数量和类型的项目的库存。甚至可能有堆叠和一些用途的物品(可能是药水)

0 投票
3 回答
455 浏览

c++ - ptr_vector 未正确释放

我正在尝试使用 ptr_vector 来存储一些指针,但是一旦我的 main 方法出现错误。这是我的代码:

这是我收到的错误消息:

我究竟做错了什么?谢谢!

0 投票
1 回答
1977 浏览

c++ - boost ptr_vector 迭代器

我正在遍历树节点的子节点。孩子们存储在 ptr_vector 中,在整个迭代过程中的某个时刻,我陷入了无限递归,但我不知道为什么。

这是发生无限递归的方法(该方法仅用于将树结构打印到 中cout):

这是我正在导航的树结构(请注意,嵌套的目的edge是表示父节点和子节点之间的距离):

此外,我注意到这种无限递归仅在调用以下方法后发生:

为什么这种方法会导致无限递归?谢谢!

0 投票
0 回答
47 浏览

c++ - 我可以使用 ptr_vector 作为堆吗?

我想用 ptr_vector 替换用作堆(sort_heap)的 std:vector。http://sourceforge.net/projects/ptr-vector/
上 ptr_vector 的作者提到使用 std 命名空间排序算法不是一个好主意,因为这会导致对象而不是指针的移动。他指的是 stdx:sort... 显然内置在 sourceforge 版本中的算法(可追溯到 2006 年)。 我在 ptr_vector 的 boost 实现中找不到后者。因此,如果我依赖于 boost ptr_vector (如何),我可以在不牺牲性能的情况下使用带有 sort_heap 的容器吗?

0 投票
3 回答
601 浏览

c++ - 如何从 boost::ptr_vector 中删除“this”

我有一个 boost::ptr_vector 包含指向“可持有”类的指针。

我从可保存类中向该向量添加新项目,如下所示:

其中 currentplanet 是指向包含 ptr_vector 的类的对象的指针。这一切都很好。

我感到困惑的是如何从它自己的类中的函数中删除 ptr_vector 中的条目。我正在努力:

与此处类似问题的答案一致:How to erase elements from boost::ptr_vector,但我显然在某个地方出错了,可能与“this”的使用有关。

在尝试编译时,我收到来自 stl_algo.h 的错误说

我确定这很明显,但我可能对 ptr_vector 的间接性感到困惑......提前感谢您的任何答案!

0 投票
2 回答
234 浏览

c++ - 随机分配给 boost::ptr_vector

我想随机分配给 boost::ptr_vector。使用正常的 STL 向量我会这样做:

我正在尝试对 boost::ptr_vector 做同样的事情:

但我收到以下错误:

但我很难理解这一点