提升范围算法实现和复杂性保证
boost range algorithm implementation & complexity guarantees
我正在考虑在我的项目中使用一些 boost range algorithms。主要是为了让我的代码不那么冗长,例如替换
std::sort(std::begin(vec), std::end(vec));
std::unique(std::begin(vec), std::end(vec));
与
boost:unique(boost::sort(vec));
我的主要保留意见是我不确定 boost 算法是否使用与标准库等价物相同的实现,或者是否具有相同的复杂性保证。我检查了一些 boost 算法的源代码,它们确实只是调用了标准库的等价物,但这是 guaranteed?
Boost.Range 文档指定了每个函数的复杂性保证。但是没有什么要求必须通过使用标准库等效的基于迭代器的算法来提供这些保证。
例如,根据文档,需要 boost::sort
才能提供 O(N log(N))
排序操作。它对等量元素没有稳定性要求。由于这些与 std::sort
的要求相同,因此 可以 通过调用该函数来实现。但是 Boost 中没有任何内容需要 这个。
我正在考虑在我的项目中使用一些 boost range algorithms。主要是为了让我的代码不那么冗长,例如替换
std::sort(std::begin(vec), std::end(vec));
std::unique(std::begin(vec), std::end(vec));
与
boost:unique(boost::sort(vec));
我的主要保留意见是我不确定 boost 算法是否使用与标准库等价物相同的实现,或者是否具有相同的复杂性保证。我检查了一些 boost 算法的源代码,它们确实只是调用了标准库的等价物,但这是 guaranteed?
Boost.Range 文档指定了每个函数的复杂性保证。但是没有什么要求必须通过使用标准库等效的基于迭代器的算法来提供这些保证。
例如,根据文档,需要 boost::sort
才能提供 O(N log(N))
排序操作。它对等量元素没有稳定性要求。由于这些与 std::sort
的要求相同,因此 可以 通过调用该函数来实现。但是 Boost 中没有任何内容需要 这个。