
C++
文章平均质量分 75
li星野
这个作者很懒,什么都没留下…
展开
-
C++:面试题汇总
本文介绍了C++编程中的一些基础概念和内存管理技术。首先,指针和引用的区别在于指针可以重新赋值并指向不同的对象,而引用是对象的别名且不能改变绑定对象。接着,const关键字用于定义常量,确保变量值不被修改,而static关键字用于控制变量和函数的生命周期和作用域。define用于定义宏,而inline用于内联函数以减少函数调用开销。constexpr用于编译时常量,volatile用于防止编译器优化,extern用于跨文件访问全局变量。std::atomic提供了对基本数据类型的原子操作封装,解决多线程数据原创 2025-05-22 23:00:00 · 786 阅读 · 0 评论 -
C++ :STL
STL(Standard Template Library)是C++标准库的核心,通过泛型编程提供高效的数据结构与算法处理。它包含四大组件:容器、迭代器、算法和函数对象。容器分为序列容器(如vector、list)、关联容器(如set、map)和容器适配器(如stack、queue),用于管理数据集合。迭代器提供访问容器元素的统一接口,支持多种操作方式。算法是独立于容器的通用函数,用于排序、查找、修改等操作。函数对象通过重载()运算符,用于算法的自定义操作。STL的设计使得C++程序员能够高效地处理复杂的数原创 2025-05-19 21:00:00 · 870 阅读 · 0 评论 -
C++:⾯向对象的三⼤特性
面向对象编程的三大特性包括继承、封装和多态。继承允许子类继承父类的属性和方法,实现代码复用;封装通过访问控制隐藏内部实现细节,仅对外提供必要接口;多态则允许不同类的对象通过相同接口调用,增强代码灵活性。访问修饰符如public、private和protected控制成员的访问权限。多重继承允许一个子类继承多个父类的特性。重载和重写的区别在于作用域和参数列表,重载在同一作用域内,重写则在继承关系中。C++多态通过虚函数和指针/引用实现,虚函数表存储虚函数地址。构造函数和析构函数分别用于对象初始化和资源释放。虚原创 2025-05-18 23:15:00 · 725 阅读 · 0 评论 -
C++:C++内存管理
C++ 内存管理涉及多个关键概念和区域,包括栈、堆、全局/静态存储区、常量存储区和代码区。栈用于存储局部变量和函数参数,由编译器自动管理;堆用于动态内存分配,需手动管理,容易产生内存泄漏。内存泄漏通常由未正确释放内存或指针丢失引起,可通过智能指针、RAII原则和内存检测工具避免。智能指针(如 std::unique_ptr、std::shared_ptr 和 std::weak_ptr)自动管理对象生命周期,减少手动内存管理的风险。野指针和悬浮指针分别指向无效内存和已销毁对象,可通过初始化指针和使用智能指针原创 2025-05-17 21:00:00 · 374 阅读 · 0 评论 -
C++:字符串操作函数
本文介绍了C++中常用的字符串处理函数和容器类方法。strcpy()用于复制字符串,strlen()计算字符串长度,strcat()连接字符串,strcmp()比较字符串。这些函数在处理字符串时非常有用,但需注意目标字符串的空间是否足够。此外,std::string类中的length()和size()方法功能相同,均返回字符串的字符个数。容器类如vector中的size()方法用于返回容器中元素的数量。这些函数和方法在字符串处理和容器操作中具有广泛的应用。原创 2025-05-16 21:15:00 · 276 阅读 · 0 评论 -
C++ 基础知识点
指针和引用是C++中两种重要的概念,指针存储变量的内存地址,可以重新赋值并支持空值,适合动态内存管理;引用是对象的别名,初始化后不能更改,且不能为空,语法更简洁安全,常用于函数参数传递和操作符重载。const关键字用于声明常量,保证变量值不被修改,可修饰变量、函数参数、成员函数等,常用于指针、引用和成员函数的常量声明,提升代码安全性。static关键字用于限制变量或函数的作用域,延长局部变量的生命周期,或声明类成员为静态,使其属于类而非对象,所有对象共享同一个静态成员。原创 2025-05-15 22:30:00 · 908 阅读 · 0 评论 -
C++ 模板方法模式详解与实例
模板方法模式(Template Method Pattern)属于行为型设计模式,其核心思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样可以使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。它通过继承机制,实现代码复用和行为扩展,减少重复代码,提升程序的可维护性和扩展性。原创 2025-05-08 20:15:00 · 1165 阅读 · 0 评论 -
模式设计简介
八大原则贯穿面向对象设计的核心逻辑,最终指向以下目标:解耦:降低模块间依赖,使系统更灵活复用:通过抽象与封装提高代码复用性健壮性:减少修改导致的连锁反应,降低维护成本可扩展性:支持通过新增代码而非修改旧代码扩展功能在实际开发中,需根据场景灵活组合原则,避免过度设计。例如,复杂业务场景可优先使用组合 + 接口隔离,简单场景可通过继承快速实现(但需警惕继承的局限性)。原创 2025-04-25 22:45:00 · 990 阅读 · 0 评论 -
muduo:运行起来
Muduo 是一个用 C++ 编写的高性能网络库,由陈硕开发,主要用于开发 Linux 环境下的高性能网络应用程序。原创 2025-04-08 23:30:00 · 1014 阅读 · 0 评论 -
std::thread的同步机制
std::future 是一个模板类,定义在 头文件中。它提供了一种机制,允许一个线程等待另一个线程的异步操作结果。当一个异步操作启动时,会返回一个 std::future 对象,通过该对象可以在需要的时候获取异步操作的返回值。原创 2025-02-23 23:38:50 · 1409 阅读 · 0 评论 -
C++:std::thread、条件变量与信号量
在多线程编程的世界里,协调不同线程之间的工作是一项极具挑战性的任务。线程可能需要等待特定条件的满足,或者对共享资源的访问进行限制。C++ 标准库为我们提供了强大的工具,如 std::thread 用于创建和管理线程,条件变量用于线程间的同步,信号量则用于控制对资源的访问。本文将通过具体的 C++ 代码示例,详细介绍如何使用这些工具。原创 2025-02-22 22:45:00 · 867 阅读 · 0 评论 -
C++:线程当中的锁专题
在 C++ 多线程编程中,线程同步是确保程序正确运行的关键环节,而锁机制则是实现线程同步的重要手段。原创 2025-02-21 22:30:00 · 699 阅读 · 0 评论 -
C++:pthread线程分离和线程属性
在 pthread 库中,线程有两种状态:可结合(joinable)和分离(detached)。默认情况下,新创建的线程是可结合的。可结合的线程在结束时,需要其他线程调用pthread_join函数来回收其资源,否则会造成资源泄漏。而分离的线程则会在结束时自动释放资源,无需其他线程来回收。线程属性定义了线程的一些特性,如栈大小、调度策略、优先级等。通过设置线程属性,可以根据具体的应用需求来优化线程的行为。在 pthread 库中,使用pthread_attr_t类型来表示线程属性。原创 2025-02-20 22:15:00 · 1096 阅读 · 0 评论 -
C++:pthread的使用
pthread 是 POSIX 线程(POSIX Threads)的简称,它是 POSIX 标准中定义的线程接口规范。pthread 库提供了一系列函数,用于创建、销毁、同步和管理线程。在类 Unix 系统(如 Linux、macOS)中,pthread 库被广泛使用,是实现多线程编程的重要工具。原创 2025-02-19 21:19:56 · 1109 阅读 · 0 评论 -
C++:并发编程基础
定义:内核是操作系统的核心部分,它是硬件与其他软件层次之间的桥梁,提供了对硬件资源的直接管理和控制,以及为上层软件提供基本的服务和接口。可以将内核看作是计算机系统的 “大脑”,负责协调和管理系统的各种活动。功能进程管理:内核负责创建、调度和销毁进程,它决定了哪个进程可以在 CPU 上运行,以及运行多长时间,确保各个进程能够公平、高效地使用 CPU 资源。原创 2025-02-18 22:30:11 · 927 阅读 · 0 评论 -
C++:gtest samples1学习
sample1.ccsample1.hsample1_unittest.cc用于验证给定的布尔表达式是否为 false。如果表达式的值为 false,则测试通过;如果为 true,则测试失败,并输出相应的错误信息,但测试会继续执行后续的断言。EXPECT_TRUE用于验证给定的布尔表达式是否为 true。如果表达式的值为 true,则测试通过;如果为 false,则测试失败,并输出相应的错误信息,但测试会继续执行后续的断言。EXPECT_EQ用于验证两个值是否相等。这里的值可以是基本数据类型(原创 2025-02-13 22:53:43 · 397 阅读 · 0 评论 -
C++:gtest的使用
Google Test(简称 gtest)是由 Google 开发的一款功能强大、灵活且广泛使用的 C++ 测试框架。它为 C++ 开发者提供了丰富的工具和断言,使得编写和运行单元测试变得更加简单和高效。gtest 具有许多优秀的特性。首先是它的跨平台性,无论是 Windows、Linux 还是 macOS 等主流操作系统,gtest 都能很好地支持,这为不同开发环境的开发者提供了便利。原创 2025-02-12 00:00:18 · 1049 阅读 · 0 评论 -
C++:断言机制
断言是一种在程序运行时进行条件检查的机制。它基于一个表达式,该表达式的值在程序正常运行时应该为真。如果表达式的值为假,就意味着程序出现了不应该发生的情况,此时断言会触发,通常会导致程序终止并输出相关的错误信息,帮助开发者快速定位问题。原创 2025-02-10 22:36:14 · 428 阅读 · 0 评论 -
C++:代码常见规范2
(1)定义指针和引用时和&紧跟类型 int& intp;(2)尽量避免使用浮点数,除非必须(3)用typedef简化程序中的复杂语法(4)避免定义无名称的类型。例如:typedef enum { EIdle, EActive } TState;(5)少用union,如果一定要用,则采用简单数据类型成员(6)用enum取代(一组相关的)常量(7)尽量不要使用MagicNumber(8)尽量用引用取代指针(9)定义变量完成后立即初始化,勿等到使用时才进行。原创 2025-02-07 23:00:00 · 1392 阅读 · 0 评论 -
C++:代码常见规范1
大括号位置:类、结构、枚举、联合的大括号应另起一行,这有助于提高代码的可读性和结构清晰度。函数体大括号:函数体的大括号也应新起一行,并且{之前不应有缩进。这有助于区分函数签名和函数体。原创 2025-02-07 22:00:00 · 971 阅读 · 0 评论 -
C++:类和对象
在C++中,对象是面向对象编程(OOP)的核心概念之一。以下是对C++中对象的详细解释:一、对象的定义对象是类的实例化,是具体的、有形的实体。在C++中,定义一个类就相当于创建了一个新的类型(class类型),而对象则是这个类型的实例。每个对象都有自己的状态和行为,分别由类的数据成员和成员函数来表示。二、对象的特性与行为数据成员:对象的数据成员用于描述对象的状态。它们可以是任何有效的数据类型,包括基本类型(如int、float)和自定义类型。原创 2024-11-20 21:15:00 · 1347 阅读 · 0 评论 -
C++:指针和引用
/ 定义一个常量整数,使用const关键字// 试图修改常量的值,会导致编译错误std::cout原创 2024-11-19 20:16:37 · 953 阅读 · 0 评论 -
C++:语言概述
处理以“#”开头的指令(如#include、#define等),并生成预处理后的源代码。:将预处理后的代码转换为汇编代码。:将汇编代码转换为机器语言的二进制形式(目标代码)。:将一个或多个目标文件以及库文件合并,生成最终的可执行文件。原创 2024-11-18 21:41:03 · 1100 阅读 · 0 评论 -
windows 自己封装库 并且使用
找到dll和.lib文件,放到一个自己重新建立的独立的文件夹,并且将.h文件放置在一起,就可以给其他程序使用了。在工程的第一层级的Debug 里面可以找到编译的库。将前面准备的文件夹放到新工程的这个目录下。现在重新创建一个工程,添加.cpp文件。点击开始执行,运行成功!原创 2024-11-14 20:26:11 · 1202 阅读 · 0 评论 -
Visual Studio 2022 安装
以c++为例,列出需要勾选的项目,有3个,即使用C++的桌面开发、通用Windows平台开发、Visual Studio扩展开发。在右侧选中源文件,右键,选择添加,然后选择新建项。原创 2024-11-14 18:18:08 · 465 阅读 · 0 评论 -
C++:智能指针了解
C++ 中的智能指针是一种用于自动管理动态分配的内存的类模板。它们可以帮助程序员避免内存泄漏和悬挂指针等问题。C++11 引入了三种主要的智能指针:std::shared_ptr 和每种智能指针都有其特定的用途和优势。原创 2024-08-11 22:20:31 · 318 阅读 · 0 评论 -
C++:哈希函数和桶
有一个简单的Point类,它有两个int类型的成员变量x和y。Point类定义了一个内部的Hash结构体,它重载了()操作符以提供哈希函数。在std命名空间中特化了std::hash模板,以便unordered_map等容器能够使用它。#include // 包含std::hash// 自定义的Point类public:int x, y;// 为了让Point可以用于unordered_map等容器中,我们需要提供哈希函数。原创 2024-08-17 21:30:00 · 1019 阅读 · 0 评论 -
C++:unordered_set和unordered_map
unordered_set 是 C++ 标准库中的一个无序关联容器,它存储的元素是唯一的,并且元素的插入、删除和查找操作平均时间复杂度为常数时间 O(1)(尽管在最坏情况下可能退化到 O(n),但这在实际情况中很少发生)。unordered_set 内部通常实现为一个哈希表,这意味着它不会根据元素的任何特定顺序来存储元素。原创 2024-08-16 23:30:00 · 849 阅读 · 0 评论 -
C++:multiset和multimap
multiset 是一个关联容器,它存储的元素也是唯一键的集合,但与set 不同的是,multiset 允许存储多个具有相同键的元素。multiset 内部通常实现为一个红黑树,这意味着元素总是按键的顺序存储,同时保持了元素插入的顺序(如果键相同,则按插入顺序)。原创 2024-08-15 23:15:00 · 442 阅读 · 0 评论 -
C++:有序关联容器map
map 是一种关联容器,它存储的元素是键值对(key-value pairs),其中每个键都映射到其关联的值上。map 内部通常实现为一个红黑树,这意味着元素总是按键的顺序存储,这使得元素的查找、插入和删除操作都能在对数时间内完成。原创 2024-08-14 23:30:00 · 566 阅读 · 0 评论 -
C++:有序关联容器set
(1)顺序容器,容器中的元素是按它们在容器中的位置来顺序保存和访问的(可以理解是数组)(2)顺序容器有array、vector、deque、list、forward_list、string等(3)关联容器中的元素是按关键字来保存和访问的,关联的意思就是关键字(key)与存储值(value)的关联(4)主要的关联容器类型是map和set(5)关联容器支持高效的关键字查找和访问(6)有序关联容器:容器内元素按顺序排列,一般用树(譬如红黑树)来实现。原创 2024-08-13 23:30:00 · 691 阅读 · 0 评论 -
C++:queue和priority_queue
优先队列(priority_queue)是一种特殊的队列,其中每个元素都被赋予了一个优先级。元素的出队顺序是根据它们的优先级来决定的,而不是它们被插入到队列中的顺序。在默认情况下,最高优先级的元素会被首先移除(即,对于最大堆实现的优先队列,最大的元素会被首先移除)。原创 2024-08-12 22:45:00 · 335 阅读 · 0 评论 -
C++:容器适配器stack详解
在两个栈之间交换元素,最直接的方法是使用swap函数(如果语言支持)或者手动将元素从一个栈转移到另一个栈中,然后反向操作以完成交换。原创 2024-08-11 22:17:46 · 548 阅读 · 0 评论 -
C++:容器了解
顺序容器是STL中的一种容器类型,用于存储一系列的元素,这些元素保持一定的顺序。原创 2024-08-07 21:00:00 · 446 阅读 · 0 评论 -
C++:模板特化
模版特化就是针对指定类型,重新编写一个函数,实现不同的功能全特化:所以类型都特化偏特化:部分类型特化、不同限定条件。原创 2024-08-06 21:45:00 · 401 阅读 · 0 评论 -
C++:std::multiplies<int>|std::for_each|std::transform
std::multiplies 是一个模板类 std::multiplies 的特化,用于整数类型的乘法。它是一个函数对象,重载了函数调用运算符,使其能够像函数一样使用。std::partial_sum 可以接受一个二元运算符作为参数,用于定义如何计算部分和。使用 std::multiplies 可以计算部分乘积。总结。原创 2024-08-05 20:30:00 · 747 阅读 · 0 评论 -
c++:内存管理
理解可用内存区域堆、栈、全局数据区、自由存储区会使用new、delete理解new和malloc的区别原创 2024-07-10 20:15:00 · 412 阅读 · 0 评论 -
C++:组合和继承的区别
理解什么是组合,一个class类里面有很多其他class类类型的成员变量理解组合和继承的区别二义性:执行了一个函数,确不一定是自己想指定的那个解决方案:用c.A::func()明确的指定调用的是class虚继承有点像条件编译,引入一次就好,不用重复引入,也能达到引入效果学习记录,侵权联系删除。来源:朱老师物联网大课堂。原创 2024-07-11 23:00:00 · 816 阅读 · 0 评论 -
C++:std::find|std::find_if|std::find_if_not
std::find: 查找与指定值相等的第一个元素。std::find_if: 查找第一个满足指定条件的元素。std::find_if_not: 查找第一个不满足指定条件的元素。原创 2024-08-03 22:15:00 · 548 阅读 · 0 评论 -
C++:std::all_of|std::any_of|std::none_of
std::all_of 检查范围内的所有元素是否都满足某个条件。若所有元素都满足条件,则返回 true,否则返回 false。原创 2024-08-02 21:45:00 · 558 阅读 · 0 评论