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::map
    my_map { {1, 2}, {3, 4} };

    总结

    时间复杂度是分析算法性能的核心工具,而一致性初始化和初值列表是C++中确保代码可靠性的重要特性。在编写代码时,始终关注输入量对性能的影响,并确保用explicit关键字保护变量的初始化。

    上一篇:C++ 标准库读书杂记二
    下一篇:mysql self summary

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月16日 16时49分25秒