它真正檢查的是contains()而不是發生次數,對吧?不允許重複,所以不會包含()是比count()更好的名稱嗎?爲什麼命名C++ STL集合的容器的count()方法?
回答
這是爲了使其與其他容器類一致,因爲多態性的一個重要方面是能夠使用相同的API處理不同的類。
它確實實際上返回計數。計數只能爲零或一個集合的事實不會改變該方面。
它不是從根本上說不同於一個集合對象,它只允許每個「值」在同一時間的兩件事情。在這種情況下,它會返回零個,一個或兩個計數,但它仍然是一個計數,與一個集合相同。
標準的相關部分需要,這是C++11 23.2.4
其中談到了關聯容器set
,multiset
,map
和multimap
。表102包含這些關聯容器之上爲「常規」的容器的要求的要求,以及用於count
位如下轉述:
size_type a.count(k)
- 返回與鍵相當於k
元件的數量。複雜性是log(a.size()) + a.count(k)
。
這是容器的標準操作,返回匹配元素的數量。在像列表這樣的事情上,這是非常有意義的。恰巧恰巧在一組中,只能出現一次元素,因此count
永遠不會返回大於1的值。
「在像列表這樣的事情中,這非常合理。」但是std :: list沒有計數方法。 – StackedCrooked 2013-05-14 04:50:24
你是對的。我真的只是在嘗試命名另一種容器類型,而不是專門在STL中進行操作;相反,只是*任何可以設想有'count'方法的類型。 @paxdiablo提到了很多特定的容器,它們都有一個計數方法。 – Gian 2013-05-14 05:01:38
所有關聯容器都必須符合§23.2.4/ 8中列出的要求表102 - 關聯容器要求。其中之一是,他們實現a.count(k)
然後
返回到K的等效鍵元件的數量
所以原因是讓所有關聯容器之間的一致的界面。例如,編寫必須與任何關聯容器一起工作的通用函數模板時,這種一致性將非常重要。
- 1. 爲什麼在C++ STL中分離算法,迭代器和容器STL
- 2. 爲什麼C++ STL映射容器O(log(n))的複雜性?
- 3. STL「rdbuf」方法名稱代表什麼?
- 4. C++ STL容器
- 5. 什麼是stl集合的C#等價物?
- 6. 爲什麼這些C++ STL無序集合被認爲是相等的?
- 7. 該方法命名爲什麼?
- 8. 什麼庫包含地圖STL集合?
- 9. 返回元素集合的Java方法的正確命名約定是什麼?
- 10. STL中的容器C++
- 11. STL - 複製混合容器
- 12. STL:容器的容器
- 13. C#中可觀察集合中Count和Count()之間的區別是什麼?
- 14. C++ STL集合差異
- 15. C++ STL集合使用
- 16. 爲STL兼容序列容器的實現命名一個很好的指南)
- 17. 什麼是快速查找最好的c + + stl容器?
- 18. C++ STL集合和C#集合的比較?
- 19. 爲什麼Java集合不提供方便的映射方法?
- 20. 爲什麼mongodb update方法創建一個擴展名爲'_keys'的新集合?
- 21. 名稱爲'count'的Count列返回多行。爲什麼?
- 22. 在C++中有超過1個排序方法的STL容器
- 23. STL容器中value_type的用法是什麼?
- 24. 爲什麼java.lang.Thread.join()方法的命名方式如此?
- 25. stl兼容的容器
- 26. Eclipse CDT無法解析STL容器中元素的方法
- 27. 爲什麼命名爲Select的LINQ「apply-to-all」方法?
- 28. 爲什麼C++ STL不提供一組線程安全的容器?
- 29. 爲什麼git無法合併具有修改的重命名?
- 30. 命名方法和命名函數的定義是什麼?
是的,它有點令人困惑,因爲set :: count()實際上做了'contains'的工作。可能出於歷史原因。 – taocp 2013-05-14 04:09:27
我認爲這是匹配['multiset'](http://en.cppreference.com/w/cpp/container/multiset)接口,其中可能有重複(因此'count()'可以返回> 1 )。雖然不是積極的。 – Xymostech 2013-05-14 04:13:00
Blah blah一致性這是一個愚蠢的名字! – Nils 2014-01-08 13:05:48