复杂度 线性。 然而,若InputIt额外满足遗留随机访问迭代器(LegacyRandomAccessIterator)的要求,则复杂度是常数。 示例 运行此代码 #include <iostream>#include <iterator>#include <vector>intmain(){std::vector<int>v{3,1,4};std::cout<<"distance(first, last) = "<<std::distance(v.begin(), v.end...
复杂度线性。 然而,如果 InputIt 额外满足老式随机访问迭代器 (LegacyRandomAccessIterator) 的要求,那么复杂度是常数。 可能的实现参阅libstdc++ 与libc++ 中的实现。 通过标签派发实现,移除 constexpr 后可用于 C++98 namespace detail { template<class It> constexpr // C++17 起要求 typename std::...
其渐近复杂度为: 409 + 2304 * log(409) \约14000步。 我的算法运行了830678步来计算你看到的解决方案。我知道实际的步数不会与t的渐近表示法相匹配,但数量级应该更接近。此外,我的算法的运行时间似乎随着输入的增加而相当稳定地增加。例如,对于渐近复杂度预测为3万次迭代的输入,算法运行了数百万次迭代,直到 ...
因此,distance()尚未计算由last指向的元素。 时间复杂度:random-access迭代器的常量,所有其他迭代器的O(n)。
复杂度 线性。 然而,若InputIt额外满足遗留随机访问迭代器(LegacyRandomAccessIterator)的要求,则复杂度是常数。 可能的实现 参阅libstdc++与libc++中的实现。 版本一 // 经由标签派发的实现,移除 constexpr 后可用于 C++98namespacedetail{template<classIt>constexpr// C++17 起要求typenamestd::iterator_traits<It...