我理解为什么std::forward_list member function,因为O(1)版本会扰乱某些splice()重载的复杂性,而且O(N)版本将与标准库的所有其他容器不一致。
另外,std::list和std::forward_list都有其他几个成员函数,它们的语义与标准库的<algorithm>角具有相同的语义(merge()、reverse()、remove()、remove_if()、unique()、sort())。
那么,为什么没有一个具有返回count()语义的O(N)复杂性的std::forward_list成员函数呢?
发布于 2013-04-29 13:36:57
提供您提到的成员函数(merge()、reverse()、remove()、remove_if()、unique()、sort())是因为它们比<algorithm>标准标头中的通用算法具有更好的复杂性。
另一方面,像count()这样的成员函数不会比std::distance(std::begin(some_list), std::end(some_list))具有更好的复杂性。
此外,它可能被误解为std::count泛型算法的更好的复杂性版本,它做了一些基本不同的事情。
发布于 2013-04-29 13:36:26
原因是,与您列出的函数不同,使用用于计数或大小函数的标准库算法的速度与直接访问底层实现的版本一样快。
您为std::forward_list提到的每个成员函数在作为成员实现时实际上都更快。特别是,它们可以在不执行包含数据的任何不必要的复制或移动的情况下进行操作。标准库算法版本要求复制或移动容器中的数据。
https://stackoverflow.com/questions/16279936
复制相似问题