std::vector::erase的时间复杂度
Time Complexity of std::vector::erase
我找到了一种从STL向量中删除元素的方法,它的值在这里:
vec.erase(remove(vec.begin(), vec.end(), value), vec.end());
现在我想知道这个方法的效率有多高,也就是说它在大O表示法中的时间复杂性。
vec.erase(remove(vec.begin(),vec.end(),value),vec_end());
在这种情况下,remove压缩向量开头与要移除的值(value)不同的元素,并将迭代器返回到该范围之后的第一个元素。然后擦除删除元素。
所以这使得这个运算为O(n)。
C++11标准在[vector.modifiers]/4:中指定
复杂性:
T
的析构函数被称为等于被擦除元素数量的次数,但移动赋值T
的运算符被称为等于在被擦除的元素之后的向量中的元素。
特别是,在最后擦除元素是非常便宜的,因为所做的一切都是破坏要擦除的元素,所以 它可以是任何东西,因为析构函数的复杂性是未知的 但假设它是常数,那么它将是O(n) O(N),因为您正在遍历向量的每个元素。erase
-调用的时间复杂度应该是线性的,就vec
-中value
的出现次数而言,这对应于Big Oh符号中的Θ(n)。整个表达式的复杂度仍然是线性的,因为remove
在其应用的范围长度方面具有线性复杂度。如果vec
的大小由变量m描述,则对于等于O(m)的完整表达式,我们具有θ
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 查找数字是否为 2 的幂的时间复杂度
- C++ - 最坏情况和平均情况插入时间复杂度在 std::unordered_map <int,int>?
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- 在这种情况下比较 std::vector 或 std::set 以获得时间复杂度 - 更有效率
- std::vector::erase的时间复杂度
- 下面使用Map和Vector实现递归级阶遍历的时间复杂度是多少
- 当一个std::vector对象在堆栈中而另一个在堆中时,vector的交换函数的时间复杂度为O(1)或O(n)