C++和 Java 数据结构的重叠:堆栈"top"与"peek"
Overlap in C++ and Java data structures: stack "top" vs "peek"
我经常在Java和C++中使用Stack数据结构。这是一个标准的数据结构,在实现许多算法时非常常见。
我的问题是(也是让我抓狂的事情)为什么C++使用"top"作为函数名,返回最顶端的元素值而不删除它,而Java使用"peek"作为方法名?
我知道数据结构没有标准,但计算机科学还不够成熟,不应该有一个标准吗?或者我只是一个新手,不知道一个标准。。。
你们这些专业程序员是否编写了自己的数据结构库,以遵守跨语言的通用接口?在我看来,这似乎是最好的做法。我用C++、Java、Python、C、Perl和PHP编写代码。除了为所有这些语言编写一个自定义界面之外,我看不到其他任何方法。我喜欢"偷看",但有什么标准我应该瞄准吗?
仅仅为了使方法名称相同而编写自定义接口将是巨大的时间浪费。这到底有什么意义?即使有这样的功能,你也无法在你提到的语言之间轻松地复制和粘贴大多数代码。
就我个人而言,我不喜欢STL矢量方法push_back()的名称。我更希望它只是被称为add(),一方面它会减少打字。然而,我从未想过我可能会改变它。这样做只会降低我的代码的可移植性和可读性。现在,我想用预处理器宏可以很容易地完成这项工作,但在我看来,即使这样也会浪费时间。
不,不可能,也永远不会成为标准。不管怎样,这两个名字都是有效的,如果你问我,top
更有意义。此外,正如@memoticocotopus所说,拥有相同的方法名并不能让你将代码从一种语言复制到另一种语言。此外,像C++和Java这样的语言非常不同,并且支持不同的功能。如果一个标准必须使用最低的公分母,它就不能利用它所实现的语言的所有特性
不管怎样,还记得上次我们标准化东西时发生了什么吗?跨浏览器兼容性和移植C代码。一想到它就让我不寒而栗。
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 堆栈和队列是否像C++中的数组一样传递?
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 在我自己的堆栈中实现top的问题
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- "top"值不会改变我推送或弹出堆栈的次数
- C++和 Java 数据结构的重叠:堆栈"top"与"peek"
- C++堆栈实现 - 两个版本的 top 方法
- stl 堆栈和 top() 函数的问题
- Stack.top() 在访问包含元素的堆栈时提供bad_access_code