Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么C++;STL集合容器';s count()方法就是这样命名的吗?_C++_Stl_Naming Conventions_Naming - Fatal编程技术网

C++ 为什么C++;STL集合容器';s count()方法就是这样命名的吗?

C++ 为什么C++;STL集合容器';s count()方法就是这样命名的吗?,c++,stl,naming-conventions,naming,C++,Stl,Naming Conventions,Naming,它真正检查的是contains()而不是出现次数的计数,对吗?也不允许重复,因此contains()不是比count()更好的名称吗?这是为了使它与其他容器类保持一致,因为多态性的一个重要方面是能够用相同的API处理不同的类 它实际上返回了计数。一个集合的计数只能是零或一这一事实并不会改变这一方面 它与同时只允许每个“值”的两个事物的集合对象没有本质上的区别。在这种情况下,它将返回0的计数,1或2,但它仍然是一个计数,与集合相同 标准中要求这一点的相关部分是C++11 23.2.4,其中涉及关联

它真正检查的是contains()而不是出现次数的计数,对吗?也不允许重复,因此contains()不是比count()更好的名称吗?

这是为了使它与其他容器类保持一致,因为多态性的一个重要方面是能够用相同的API处理不同的类

它实际上返回了计数。一个集合的计数只能是零或一这一事实并不会改变这一方面

它与同时只允许每个“值”的两个事物的集合对象没有本质上的区别。在这种情况下,它将返回0的计数,1或2,但它仍然是一个计数,与集合相同

标准中要求这一点的相关部分是
C++11 23.2.4
,其中涉及关联容器
set
multiset
map
multimap
。表102包含了这些关联容器的要求,超过了“常规”容器的要求,并且
count
的位解释如下:

size\u type a.count(k)
-返回键等于
k
的元素数。复杂性是
log(a.size())+a.count(k)


这是容器上的标准操作,返回匹配元素的数量。在列表之类的事情中,这是非常有意义的。恰好在一个集合上,一个元素只能出现一次,因此
count
不能返回大于1的值。

所有关联容器必须满足§23.2.4/8表102-关联容器要求中列出的要求。其中之一是它们实现了
a.count(k)
,然后

返回键等于k的元素数


因此,原因是在所有关联容器之间有一个一致的接口。例如,在编写必须与任何关联容器一起使用的通用函数模板时,这种一致性将非常重要。

是的,这有点令人困惑,因为set::count()实际上执行
包含的工作。可能是出于历史原因。我认为这是为了匹配接口,接口中可能存在重复项(因此
count()
可以返回>1)。不太好。这是个愚蠢的名字!“在像列表这样的事情中,这是非常有意义的。”但是std::list没有计数方法。你是对的。我只是在尝试命名另一种容器类型,而不是在STL中;相反,任何类型都可以想象有一个
count
方法@paxdiablo提到了很多有计数方法的特定容器。
复杂性是log(a.size())+a.count(k)
的意思是什么?它似乎是递归的:)@Cade,我有一点担心我会误写它,但不是。它实际上不是递归的,因为在调用
a.count(k)
的函数中没有计算复杂度的东西——它只是说明函数的复杂度受匹配键的元素数量的影响。