【问题标题】:Overlap in C++ and Java data structures: stack "top" vs "peek" [closed]C++ 和 Java 数据结构中的重叠:堆栈“top”与“peek”[关闭]
【发布时间】:2012-08-26 20:26:45
【问题描述】:

我经常在 Java 和 C++ 中使用 Stack 数据结构。这是一种标准的数据结构,在实现许多算法时很常见。

我的问题是(以及让我发疯的事情)为什么 C++ 使用“top”作为函数名,它返回最顶层的元素值而不删除它,而 Java 使用“peek”作为它的方法名?

我知道没有数据结构的标准,但是计算机科学还没有发展到应该有标准的地步吗?还是我太新手了,不知道标准...

你们这些专业程序员是否会编写自己的数据结构库来遵守跨语言的通用接口?在我看来,这似乎是最好的选择。我用 C++、Java、Python、C、Perl 和 PHP 编写代码。除了为所有这些语言编写自定义界面之外,我没有看到任何其他方法。我喜欢“窥视”,但有什么我应该瞄准的标准吗?

【问题讨论】:

  • 在 C++ 中,stack::top 返回堆栈的 top 元素,而在 Java 中,peek 函数在顶部进行 peek元素?
  • 好的,我对这个网站上的敌意感到惊讶。我想这不是新手和愚蠢问题的地方。对不起。
  • @dvanaria:不要感到抱歉。我认为这是一个查找问题。关键是,这个问题并没有真正的答案。这就是该网站拒绝它的原因。但我将此评论标记为冒犯性,因为它确实如此。
  • 这个问题在过去 9 年中被搜索/查看了 5k 次!似乎很多人,尤其是那些不是多语言程序员的人一直在想同样的问题!对不起,有些人如此咄咄逼人!

标签: java c++ data-structures stack


【解决方案1】:

编写自定义接口只是为了使方法名称相同将是浪费大量时间。究竟有什么意义?即使有这样的功能,您也无法轻松地在您提到的语言之间复制和粘贴大多数代码。

就个人而言,我不喜欢 STL 向量方法 push_back() 的名称。如果它只是被称为 add(),我更喜欢它,一方面它会减少打字。然而,我从来没有想过我可能会改变它。这样做只会降低我的代码的可移植性和对其他人的可读性。现在,我想这可以通过预处理器宏相当容易地完成,但即使这样在我看来也是浪费时间。

【讨论】:

  • 如果是add而不是push_back,那么deque不能符合它的​​接口。
  • add 可能位于前面或后面或中间,因此名称必须指明元素添加到的位置。
  • 不一定。这一切都归结为惯例。如果每个人都明白 add() 的意思是最后的意思,而 addfront() 的意思是相反的,那就可以了。我的观点是,方法名称的约定是相当随意的,你只需要忍受它。
【解决方案2】:

不,不可能,不会,也永远不会成为标准。无论如何,这两个名字都是有效的,如果你问我,top 更有意义。此外,正如@mimicocotopus 所说,拥有相同的方法名称不会让您将粘贴代码从一种语言复制到另一种语言。此外,像 C++ 和 Java 这样的语言非常不同,并且支持不同的特性。如果一个标准必须使用最小的公分母,它就无法利用它实现的语言的所有特性。

不管怎样,还记得上次我们对某些东西进行标准化时发生了什么吗?跨浏览器兼容性和移植 C 代码。光是想想就让人不寒而栗。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2017-02-23
    • 2020-11-26
    • 2015-10-21
    • 2013-07-06
    • 2021-05-29
    相关资源
    最近更新 更多