当前位置: 首页 > article >正文

C++:vector的push_back时间复杂度分析

引导示例

#include <iostream>
#include <vector>

int main() {
	std::vector<int> v;
	std::cout << v.capacity() << " ";
	int last = 0;
	for (int i = 1; i <= 10; i++) {
		v.push_back(1);
		std::cout << v.capacity() << " ";
	}
	
	return 0;
}

我们在C++17下运行上面的代码,可以得到如下的结果:

0 1 2 4 4 8 8 8 8 16 16

在这里插入图片描述
初步观察到,当进行push_back时,如果容器的大小达到容量,就会再开辟一个新的内存


复杂度分析:

假设容量从 1 开始,逐步倍增到 2, 4, 8, …, 2^k;总共进行n次插入。

每次扩容的代价为:
在这里插入图片描述

总的扩容代价:(求和公式)
在这里插入图片描述

加上n次插入:
总的代价为 (3n-1) / n = O(3) = O(1)


http://www.kler.cn/a/569351.html

相关文章:

  • Qt的坐标
  • 手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
  • Java中用Map<String,Object>存储层次结构
  • 力扣1584. 连接所有点的最小费用
  • 使用Docker Compose部署 MySQL8
  • Win32 C++ 电源计划操作
  • Java+Vue+uniapp微信小程序校园自助打印系统(程序+论文+讲解+安装+调试+售后)
  • 阿里管理三板斧课程和管理工具包(视频精讲+工具文档).zip
  • vue3+ts+uniapp+unibest 微信小程序(第二篇)—— 图文详解自定义背景图页面布局、普通页面布局、分页表单页面布局
  • 矩阵的奇异值(SVD)分解和线性变换
  • 11.24 SpringMVC(1)@RequestMapping、@RestController、@RequestParam
  • leetcode:2164. 对奇偶下标分别排序(python3解法)
  • [代码规范]接口设计规范
  • uni.getLocation 微信小程序中获取位置失败原因
  • spring注解开发(Spring整合JUnit+MyBatis)(7)
  • 常见的正则匹配规则
  • 深入解析SQL Server高级SQL技巧
  • 微店商品详情API接口实战指南:从零实现商品数据自动化获取
  • buuctf.web 64-96
  • 计算机毕业设计SpringBoot+Vue.js贸易行业CRM系统(源码+文档+PPT+讲解)