2012-09-01 212 views
-3

我經常在Java和C++中使用Stack數據結構。這是一個標準的數據結構,在實現許多算法時很常見。爲什麼C++使用「top」作爲函數名稱,返回最頂端的元素值而不移除它,而Java使用「peek」作爲方法名稱?在C++和Java數據結構中重疊:堆棧「top」vs「peek」

我知道數據結構沒有標準,但沒有足夠的計算機科學應該有一個標準?或者我只是太多的新手瞭解一個標準...

做那些你是專業的程序員寫你自己的數據結構庫,堅持跨語言通用接口?在我看來,這似乎是最好的事情。我用C++,Java,Python,C,Perl和PHP編寫代碼。我只是沒有看到任何其他方式,而是爲所有這些語言編寫自定義界面。我喜歡「偷看」,但有什麼標準我應該瞄準?

+0

在C++中,'stack :: top'返回堆棧的_top_元素,而在Java中'peek'函數在頂部元素處帶有_peek_? –

+0

好吧,我對這個網站的敵意感到驚訝。我猜它不是新手和愚蠢問題的地方。抱歉。 – dvanaria

+0

@dvanaria:不要感到抱歉。我認爲這是一個發現問題。問題是,這個問題並沒有真正的答案。這就是網站拒絕它的原因。但我把這個評論標記爲冒犯,因爲它是。 – Linuxios

回答

5

編寫一個自定義接口只是爲了使方法名稱相同將是一個巨大的浪費時間。究竟是什麼意思?即使使用這種功能,您也無法輕鬆地將大多數代碼複製並粘貼到您所提及的語言之間。

就我個人而言,我不喜歡STL向量方法push_back()的名稱。我更喜歡它是否只是叫做add(),因爲一件事情就是少打字。然而,我從未想到我可能會改變它。這樣做只會讓我的代碼變得更加便攜,而對其他代碼的可讀性會降低。現在,我認爲這可以通過預處理器宏輕鬆完成,但即使這樣也會浪費時間。

+1

如果它是'add'而不是'push_back',那麼'deque'不符合它的接口。 – Mehrdad

+0

但是'add'可能在前面或後面或中間,所以名稱必須指示元素被添加到的位置。 – juanchopanza

+0

不一定。這一切都歸結爲慣例。如果每個人都明白add()意味着在最後,addfront()意味着相反,那麼它會工作正常。 我的意思是,方法名稱的約定是相當隨意的,你只需要忍受它。 – mimicocotopus

3

不,不會有,不會是標準。無論如何,這兩個名字都是有效的,如果你問我,top更有意義。另外,正如@mimicocotopus所說,它不像具有相同的方法名稱可以讓您將粘貼代碼從一種語言複製到另一種語言。而且,像C++和Java這樣的語言也非常獨特,並且支持不同的功能。如果一個標準必須使用最小公分母,它不能利用它實現的語言的所有功能。

無論如何,記住上次我們標準化了什麼嗎?跨瀏覽器兼容性和移植C代碼。它讓我不寒而慄,想到它。