随笔分类 - cpp
摘要:在C++中,condition_variable是一种多线程同步机制,它允许一个或多个线程等待另一个线程发出通知,以便能够有效地进行线程同步1。condition_variable是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待condition_variable的条件成
阅读全文
摘要:https://blog.csdn.net/sjc_0910/article/details/118861539 unique_lock 和 lock_guard 多线程是一种实现并发处理的有效方式,C++11开始引入了<thread>库,使得多线程编程更加容易和高效。以下是C++中多线程编程的一些
阅读全文
摘要:在使用std::move时,有几个重要的注意事项: std::move并不会真正地移动对象,真正的移动操作是在移动构造函数、移动赋值函数等完成的,std::move只是将参数转换为右值引用1。 std::move将一个左值强制转化为右值引用,以用于移动语义。移动语义,允许直接转移对象的资产和属性的所
阅读全文
摘要:C++程序的编译过程通常分为四个主要步骤: 预处理(Preprocessing):这个阶段主要处理源代码文件中的以“#”开头的预编译指令4。例如,对宏进行展开,对include的文件进行展开,处理条件编译选项判断,清理注释等。预处理后生成的文件通常以.i或.ii结尾2。 编译(Compilation
阅读全文
摘要:reinterpret_cast和static_cast都是C++中的类型转换运算符,但它们的用途和行为有所不同。 static_cast: static_cast用于执行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。 它也可以用于类层次结构中基类(父类)和派生类(子类)之间指针
阅读全文
摘要:成员初始化列表是C++中的一个特性,它允许在构造函数中对类的成员变量进行初始化。成员初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。例如: class MyClass { public: MyClass(int a, int b) : m_a(a), m_b(b) { } private:
阅读全文
摘要:一般指堆的内存泄漏,简单来说就是已申请的内存空间没有被正确释放。 避免内存泄露的几种方式 计数法:使用new或者malloc时,让该数+1,delete或free时,该数-1,程序执行完打印这个计数,如果不为0则表示存在内存泄露 一定要将基类的析构函数声明为虚函数 对象数组的释放一定要用delete
阅读全文
摘要:C++ string 类的扩容机制主要取决于编译器的实现,但一般来说,它们都遵循一种动态数组的策略,即当字符串的大小超过当前容量时,就会分配更大的内存空间。以下是一种常见的扩容策略1: size_type _Grow_to(size_type _Count) const { size_type _C
阅读全文
摘要:算法 平均时间复杂度 最差空间复杂度 快速排序 nlogn logn 归并排序 nlogn n timsort nlogn n 堆排序 nlogn 1 冒泡排序 n^2 1 插入排序 n^2 1 选择排序 n^2 1 希尔排序 (nlogn)^2 1 桶排序 n+k n 基数排序 nk n+k
阅读全文
摘要:单例模式是一种常用的软件设计模式,其目标是确保一个类只有一个实例,并提供一个全局访问点。在C++中,可以通过以下步骤实现单例模式: 私有化构造函数,以防止外界创建单例类的对象。 使用类的私有静态指针变量指向类的唯一实例。 使用一个公有的静态方法获取该实例。 以下是一个简单的C++单例模式的实现示例:
阅读全文
摘要:在C++中,new关键字主要用于动态内存分配。以下是一些可能需要使用new的情况: 复杂类型:对于复杂类型,如自定义的类类型,通常需要使用new进行动态内存分配。 大量内存空间:当你需要大量的内存空间时,比如你需要一个包含10000个int的数组,这时候你就需要使用new。 内存大小未知:有时实体的
阅读全文
摘要:C++程序在执行时,将内存大致分为以下几个区域: 栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的。(const 在栈里)堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放。new malloc全局区:全局变量、静态变量(static),生命周期是程序整
阅读全文
摘要:在C++中,set、map、unordered_set和unordered_map这四种容器的使用场景如下: set:适用于需要保持元素独特性且无需特定顺序的情况。例如,存储一组唯一的用户名、IP地址等。set实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适
阅读全文
摘要:在C++中,多态是面向对象编程的一个重要特性,它允许通过基类的指针或引用来调用派生类的成员函数。多态的字面意思是“多种形态”,它允许相同的操作可以作用于不同的对象,而具体执行的操作则取决于对象的类型和特性。 在C++中,多态主要通过虚函数来实现。虚函数是在基类中使用关键字virtual声明的函数,在
阅读全文