- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
不幸的是,我需要开发一个基于代理的模型。我的背景是 C++;我很体面,但不是专业的程序员。我的目标是确定,撇开我的背景不谈,用 C++ 或 Java 编写以下算法是否会更快或更容易。
Host
.他们的私有(private)成员变量包括他们对不同菌株的感染和免疫状态(类型 int
)。 (在 C++ 中,我可能会使用 unordered_map
或 vector
来保存此信息,具体取决于菌株的数量。)我计划跟踪 vector 中的所有主机,vector< Host *> hosts
。 . vector< Host *> immune
和 vector< Host *> infectious
(我可能会制作每个二维的,按菌株和宿主索引)。host
并搜索其他结构( immune
和 infectious
)以找到指向该对象的所有指针。 我的印象是,如果我删除底层对象,Java 会隐式删除所有这些指针。这是真的吗?在 C++ 中,有没有比我这里提供的方法更好的方法?在此先感谢您的帮助。
我应该补充一点,如果我使用 C++,我将使用智能指针。也就是说,当对象需要离开时,我仍然没有看到一种巧妙的方法来删除指向该对象的所有指针。 (当宿主死亡时,我想将其从内存中删除。)
我意识到在 Java 中有很多东西需要学习。我希望对这些语言之间的差异有更多看法并且能够理解我需要做什么(上文)的人可以告诉我一种语言是否明显比另一种语言更有效。
最佳答案
I'm under the impression that Java will delete all these pointers implicitly if I delete the underlying object. Is this true?
没有。你实际上把它倒过来了;如果删除所有指针,Java 将删除底层对象。因此,您仍然需要搜索所有三个数据结构(hosts
、immune
和 infectious
)以杀死该特定主机。
但是,如果您使用正确的数据结构,这种“搜索”将变得快速而简单; HashSet
可以很好地完成这项工作。
private HashSet<Host> hosts;
private HashSet<Host> immune;
private HashSet<Host> infectious;
public void killHost(Host deadManWalking) {
hosts.remove(deadManWalking);
immune.remove(deadManWalking);
infectious.remove(deadManWalking);
}
真的就这么简单,而且会在 O(lg n) 时间内完成。 (尽管您必须在 Host
的实现中覆盖 equals
和 hashCode
方法;这在技术上没有挑战性。)
我对 C++ 的内存太模糊了,无法对这两种语言进行任何形式的权威比较;我在大学里做了很多 C++ 的工作,从那以后就再也没有碰过它。 C++代码会运行得更快吗?如果做得好并假设您没有任何内存泄漏,我怀疑它会,尽管 Java 作为一种慢速语言的代表主要是它年轻时的遗留问题;这几天很不错。更容易写?好吧,假设你会学习这门语言,可能不会。但是从 C++ 到 Java 的学习曲线非常平缓,我个人一点也不怀念 C++。一旦您了解了这些语言,在我看来,使用 Java 会容易得多。 YMMV,当然,但这对您来说可能是值得的。
关于Java 还是 C++ 适用于我特定的基于代理的模型 (ABM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419857/
abm.exe是什么进程? abm.exe是ABM快闪王,按一个键或点一下鼠标就把您要关闭的很多程序、托盘、音量快速隐藏或关闭。一键搞定,隐藏多个程序。还有定时提醒或关闭您的显示器让您休息一下。
不幸的是,我需要开发一个基于代理的模型。我的背景是 C++;我很体面,但不是专业的程序员。我的目标是确定,撇开我的背景不谈,用 C++ 或 Java 编写以下算法是否会更快或更容易。 我的特工将属于
我有一个数据库,我想从服务器上删除它,但是当我想删除它时,出现了上述错误。 尝试寻找解决方案,我在此链接 Error in dropping a database in MySQL (can't rm
我在控制台中有此消息,在格式化计算机之前没有出现。 Ubuntu 18.04, Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz, cpu_cores: 4 8GB Ra
我是一名优秀的程序员,十分优秀!