是STL size()在恒定复杂度或线性上运行
Is STL size() runs on constant complexity or Linear?
哪个更高效,哪个更方便使用?
std::vector<int> V(Some Integers);
1)
for(int i=0 ; i<V.size() ; ++i){
std::cout<<V[i]<<" "; // print all integers
}
2)
int size=V.size();
for(int i=0 ; i<size ; ++i){
std::cout<<V[i]<<" "; // printing all integers
}
这取决于所使用的容器和c++标准。例如,C++03
中的std::set::size()
可以达到线性复杂度。对于C++14
、size()
,所有常用容器(至少vector
、list
、set
、map
、unordered_set
、unordered_map
、queue
、deque
)的运行时间都是恒定的。
size
通常以常数时间运行。人们主要担心的是它能否运行。编译器可以识别出您所做的任何操作都没有改变大小,但它可能无法这样做。在这种情况下,您可以在每次迭代中调用一个函数,即使在常量时间内,也可能(或不会)比简单的整数比较慢。
如果你有一个复杂的容器(不是一个向量,其中的大小很可能已经是一个简单的变量),你正在对它的元素做复杂的事情(你没有改变大小,但有可能编译器不会意识到这一点),你的时间非常紧张(循环执行了数百万次),那么使用第二个版本可能是有意义的。
相关文章:
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- C++中 std::map 的运行时复杂度是多少?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 确定 for 循环的不同大 O 复杂度
- 返回C++和时间复杂度的线性列表
- 为什么std::vector::insert复杂度是线性的(而不是常量)
- 是STL size()在恒定复杂度或线性上运行