【发布时间】:2015-05-11 14:49:57
【问题描述】:
刚刚意识到std::count_if returns a signed value。
为什么要这样设计?在我看来,这是没有意义的(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将此结果与容器的size() 进行比较而不会收到警告或使用显式类型转换。
我真的认为返回类型应该是size_type。
我错过了什么吗?
【问题讨论】:
-
返回
count的迭代器的difference_type是有意义的,因为它几乎只是参数的差异,因此保留count_if的接口是有意义的,为双向迭代器签名difference_type同样有意义。 -
同样,为什么一个人不能在恒定时间内拆分两个
std::lists? -
@WojciechFrohmberg:很简单,你需要计算元素。一旦创建的列表有 O(1)
.size()这意味着它被缓存了, -
@MSalters 但是您可以将位置存储在可用于拆分列表的迭代器中,以便可以摊销......
-
@WojciechFrohmberg:您将如何保持当前的立场?请记住,您可以在列表上调用
push_front而不会使现有迭代器失效,显然这确实会将所有现有迭代器的位置更改一个。
标签: c++ stl standard-library stl-algorithm