
C++ 标准库读书杂记一
发布日期:2021-05-10 05:00:35
浏览次数:15
分类:精选文章
本文共 2088 字,大约阅读时间需要 6 分钟。
时间复杂度(Time Complexity)与Big-O标记
在编程和算法分析中,理解时间复杂度至关重要,尤其是通过Big-O标记(Big-O Notation)来描述算法的时间复杂度。Big-O标记帮助我们量化算法在处理不同规模输入时所需要的时间。
O(1):常量时间复杂度
这种复杂度与输入数据的数量无关,是最优 化的情况。例如,直接访问数组中的元素或进行几何操作(如矩阵索引)都属于O(1)复杂度。因为操作只需固定时间,与输入量无关。O(log n):对数时间复杂度
当算法的时间复杂度与输入量呈对数关系时,如二分查找(Binary Search),O(log n)就用来描述这种复杂度。这种复杂度在处理非常大的输入时非常高效,因为它随着输入量的增长而缓慢增加。O(n):线性时间复杂度
这种复杂度与输入数据的数量呈线性关系,处理每个元素需要一次常数时间操作。例如,遍历数组或逐个比较元素,时间复杂度属于O(n)。O(n log n):线性对数时间复杂度
这种复杂度既包含了输入量的线性因素,也包含了对数因素。典型的例子是排序算法,如合并排序(Merge Sort),其时间复杂度为O(n log n),因其效率非常高。O(n²):平方时间复杂度
当算法的时间复杂度与输入量呈平方关系时,如 bubble sort(泡沫排序),其时间复杂度为O(n²),执行时间随着输入量的平方增长。需要注意,输入量必须足够大才有意义,这是评估时间复杂度的常规做法。例如,对于O(n²)算法,当n大于100时,其执行时间可能会显著增加,从而影响性能。
一致性初始化与初始值初始化
在C++中,一致性初始化(Uniform Initialization)是一个强大的功能,能够确保对象的成员变量在所有构造函数中初始化的正确性。
一致性初始化
一致性初始化要求所有成员变量使用相同的初始化方式。如果有多个成员变量,必须使用相同的初始化语法。
int values[] {1, 2, 3, 4};char a {'*'};char b {6};char c {999}; // 错误的使用,因char类型的范围为0-127,未经转换无法存储999。
初值列(Initializer List)
初值列(Initializer List)允许在初始化对象时,逐个指定成员的初始值。使用explicit
关键字可以避免将原始数组或其他类型的对象初始化为目标对象。
#include#include using namespace std;class initial {public: vector veca; initial(int _a, int _b) { veca.push_back(_a); veca.push_back(_b); print_self("initial(int, int)", __LINE__); } initial(initializer_list lista) { veca = lista; print_self("initial(initializer_list )", __LINE__); } void print_self(const string& funcname, long line) { cout << funcname << endl; cout << line << endl; for (int var : veca) { cout << var << "\r\n"; cout << endl; } }};int _tmain(int argc, _TCHAR* argv[]) { initial init1(77, 5); initial init2{ 77, 5, 8 }; system("pause"); return 0;}
但是,使用列表初始化值时必须小心,避免信息丢失。例如:
// 错误的使用,将导致编译器错误std::initializer_list init_list { 10 };// 正确的使用,指定每个元素的初始值std::mapmy_map { {1, 2}, {3, 4} };
总结
时间复杂度是分析算法性能的核心工具,而一致性初始化和初值列表是C++中确保代码可靠性的重要特性。在编写代码时,始终关注输入量对性能的影响,并确保用explicit
关键字保护变量的初始化。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月16日 16时49分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
华大芯片调试问题
2019-03-14
DCMTK:存储服务类用户(C-STORE操作)
2019-03-14
带照片捕捉功能的ESP32-CAM PIR运动检测器
2019-03-15
ARM Mbed RFID读取器
2019-03-15
如何使用SSH远程管理Linux服务器
2019-03-15
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
在FPGA板上实现数字时钟的VHDL代码
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
在30分钟内学习PHP
2019-03-15
Python http.server 服务器
2019-03-15
Python svm 支持向量机
2019-03-15
OpenStack 最小化安装配置(一):物理机网桥配置
2019-03-15
shell中将字符中换行符'\n'替换为空格
2019-03-15
PS快速美白照片
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
pip国内镜像(清华大学镜像)
2019-03-15
浅学C#(25)——任务Task
2019-03-15
原生的JavaScript控制复选框的选项个数
2019-03-15