草庐IT

sort_list

全部标签

c++ - 为什么大小不是 std::initializer_list 的模板参数?

std::initializer_list由编译器从大括号括起来的初始化列表中构造,并且该列表的大小必须是编译时间常数。那么为什么委员会决定从模板参数中省略大小?这可能会阻止某些优化并使某些事情变得不可能(从std::initializer_list初始化std::array)。 最佳答案 如果initializer_list被定义为std::initializer_list,然后是any接受initializer_list的函数,其中type是一些具体类型,现在必须是基于该列表大小的模板函数。或者他们必须要求用户通过initial

c++ - 为什么大小不是 std::initializer_list 的模板参数?

std::initializer_list由编译器从大括号括起来的初始化列表中构造,并且该列表的大小必须是编译时间常数。那么为什么委员会决定从模板参数中省略大小?这可能会阻止某些优化并使某些事情变得不可能(从std::initializer_list初始化std::array)。 最佳答案 如果initializer_list被定义为std::initializer_list,然后是any接受initializer_list的函数,其中type是一些具体类型,现在必须是基于该列表大小的模板函数。或者他们必须要求用户通过initial

c++ - std::stable_sort:如何选择内存优化算法而不是时间优化算法?

我希望使用std::stable_sort。算法的复杂度表示为O(N·log^2(N)),whereN=std::distance(first,last)applicationsofcmp.Ifadditionalmemoryisavailable,thenthecomplexityisO(N·log(N)).http://en.cppreference.com/w/cpp/algorithm/stable_sort在我的应用程序中,内存至关重要,因此,我更喜欢std::stable_sort使用内存优化的O(N·log^2(N))算法,而不是时间优化的O(N·log(N))算法。我了

c++ - std::stable_sort:如何选择内存优化算法而不是时间优化算法?

我希望使用std::stable_sort。算法的复杂度表示为O(N·log^2(N)),whereN=std::distance(first,last)applicationsofcmp.Ifadditionalmemoryisavailable,thenthecomplexityisO(N·log(N)).http://en.cppreference.com/w/cpp/algorithm/stable_sort在我的应用程序中,内存至关重要,因此,我更喜欢std::stable_sort使用内存优化的O(N·log^2(N))算法,而不是时间优化的O(N·log(N))算法。我了

c++ - 为什么 std::sort 不通过引用接受比较器?

standardonstd::reference_wrapper解释说std::sort现在接受std::reference_wrapper,允许通过引用传递比较器。std::sort一开始没有通过引用接受比较器是否有原因? 最佳答案 简而言之,没有必要引用它;这相当于一个“设计”的决定。我相信推理集中在C++和标准库中已经存在很长时间的一些基本原理上;值语义对实现施加尽可能少的限制值语义几乎随处可见。几乎所有的算法、容器等都期望其中包含的数据遵守正常的值规则,即表现得好像它们是内置类型一样。这也是C++类型系统背后的原因之一,它使

c++ - 为什么 std::sort 不通过引用接受比较器?

standardonstd::reference_wrapper解释说std::sort现在接受std::reference_wrapper,允许通过引用传递比较器。std::sort一开始没有通过引用接受比较器是否有原因? 最佳答案 简而言之,没有必要引用它;这相当于一个“设计”的决定。我相信推理集中在C++和标准库中已经存在很长时间的一些基本原理上;值语义对实现施加尽可能少的限制值语义几乎随处可见。几乎所有的算法、容器等都期望其中包含的数据遵守正常的值规则,即表现得好像它们是内置类型一样。这也是C++类型系统背后的原因之一,它使

c++ - 为什么 std::list.size() 不是恒定时间?

这个问题在这里已经有了答案:Islist::size()reallyO(n)?(8个回答)关闭4年前。这段代码运行了0.012秒:std::listlist;list.resize(100);intsize;for(inti=0;i这个9.378秒:std::listlist;list.resize(100000);intsize;for(inti=0;i在我看来,有可能以这种方式实现std::list,该大小将存储在私有(private)变量中,但根据此,每次调用size时都会再次计算它。谁能解释一下为什么? 最佳答案 常数时间s

c++ - 为什么 std::list.size() 不是恒定时间?

这个问题在这里已经有了答案:Islist::size()reallyO(n)?(8个回答)关闭4年前。这段代码运行了0.012秒:std::listlist;list.resize(100);intsize;for(inti=0;i这个9.378秒:std::listlist;list.resize(100000);intsize;for(inti=0;i在我看来,有可能以这种方式实现std::list,该大小将存储在私有(private)变量中,但根据此,每次调用size时都会再次计算它。谁能解释一下为什么? 最佳答案 常数时间s

c++ - 流行的 C++ 编译器对 std::sort 和 std::stable_sort 使用什么算法?

流行的C++编译器对std::sort和std::stable_sort使用什么算法?我知道标准只给出了某些性能要求,但我想知道流行的实现在实践中使用了哪些算法。如果它引用每个实现的引用,答案会更有用。 最佳答案 首先:编译器不提供std::sort的任何实现。虽然传统上每个编译器都预先打包了一个标准库实现(它严重依赖于编译器的内置),但理论上您可以将一个实现换成另一个。一个很好的例子是Clang编译libstdc++(传统上使用gcc打包)和libc++(全新)。现在已经不碍事了……std::sort传统上被实现为intro-so

c++ - 流行的 C++ 编译器对 std::sort 和 std::stable_sort 使用什么算法?

流行的C++编译器对std::sort和std::stable_sort使用什么算法?我知道标准只给出了某些性能要求,但我想知道流行的实现在实践中使用了哪些算法。如果它引用每个实现的引用,答案会更有用。 最佳答案 首先:编译器不提供std::sort的任何实现。虽然传统上每个编译器都预先打包了一个标准库实现(它严重依赖于编译器的内置),但理论上您可以将一个实现换成另一个。一个很好的例子是Clang编译libstdc++(传统上使用gcc打包)和libc++(全新)。现在已经不碍事了……std::sort传统上被实现为intro-so