方法向量的新/分配的复杂性::p ush_back
Complexity for new/alloc for method vector::push_back
对于
下面的代码,对于 N 的巨大值,分配(realloc)/新操作的复杂性是多少?
据我所知push_back分配内存:
大小 = CST*old_size;
CST = 2;对于海湾合作委员会
所以我们在 k 循环中有 O(1),在 i 循环中有 ~O(N)。总之,我有O(N),对吗?
std::vector<int> data;
for (int i = 0; i < N; ++i)
{
for (int k = 0; k < 2 * N; ++k)
data.push_back(k);
for (int k = 0; k < N; ++k)
data.pop_back();
}
vector::p ush_back不完全是O(1),而是C++标准要求的摊销O(1)。查看固定摊销时间
当重新分配发生时,它将向量的分配大小加倍,因此(对于任意大的 N 值)在给定的示例中,它将发生恒定*log_2(N) 次。
是的,push_back调用的复杂性被摊销 O(1),因为如果向量很大(更好:时间不取决于大小),重新分配不会花费更多时间,但重新分配仍将在循环内发生恒定*log_2(N) 次(其中常量 != 0)。
最后,在 k 循环示例中,重新分配的复杂性为
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 链表回推操作中需要'back pointer'
- 为什么 std::string 的 back() 应该返回对字符的引用?
- VC++ 自动说明符假定矢量的引用限定符<bool>::back的引用限定符
- C: strtok value gives back null
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- 在std::vector中实现back()
- 在push_front属性上有点混淆.intlist.push_front(2 * intlist.back())会做些
- 将对象转换为 char,然后"uncasting it back"
- 对 Stack<int>::p ush(int const&) 的未定义引用