![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++进阶系列
文章平均质量分 55
C++进阶系列
Android系统攻城狮
CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
展开
-
C++之lambda函数与std::bind区别及用法实例(二百八十)
本篇目的:C++之lambda函数与std::bind区别及用法实例C++11引入了lambda表达式,这是一种方便快捷的方式来创建匿名函数对象。Lambda函数在C++中非常有用,特别是在需要传递简短的函数作为算法的参数时,例如在std::sort或std::find_if等算法中。Lambda函数可以有参数,并且可以包含一个表达式或者一个花括号内的一系列语句。Lambda函数的基本语法如下:[捕获列表](参数列表) mutable -> 返回类型 {// 函数体。原创 2024-05-27 05:15:00 · 640 阅读 · 0 评论 -
C++之单链表与双链表逆序实例(二百七十九)
本篇目的:C++之单链表与双链表逆序实例单链表和双链表是线性表的两种常见实现方式,它们在数据结构中占有重要的地位。链表通过指针将不连续的内存空间连接起来,从而实现对线性数据的存储和管理。原创 2024-05-23 18:33:41 · 1099 阅读 · 0 评论 -
C++之容器:array用法实例(二百七十八)
本篇目的:C++之容器:array用法实例C++ 容器是用于存储和管理数据的结构,C++标准库中提供了多种容器供程序员使用。其中,array(数组)是最基础的容器之一,它提供了一种有序的数据存储方式。array 容器是一种固定大小的序列容器,它可以在编译时或运行时确定其大小。array 容器在内存中连续存储元素,因此元素之间的距离很近,访问速度快。array 容器的模板定义在头文件中。原创 2024-05-22 14:55:52 · 774 阅读 · 0 评论 -
C++之容器:list用法实例(二百七十七)
本篇目的:C++之容器:list用法实例在 C++ 中,std::list是一种常用的线性容器,它提供了一种双向链表的数据结构,可以用来存储一系列有序的元素。作为 STL(标准模板库)的一部分,std::list具有高效的数据操作性能,尤其适用于在列表的一端进行频繁的插入和删除操作。std::list的一些基本特点包括:双向链表结构std::list中的每个元素都是一个双向链表的节点,包含数据域和两个指针,分别指向前一个节点和后一个节点。这种结构使得列表中的元素可以快速地从两端进行插入和删除操作。原创 2024-05-21 17:16:24 · 809 阅读 · 0 评论 -
C++与Android处理16进制大端/小端数据实例(二百七十六)
本篇目的:C++与Android处理按大端/小端数据实例大小端模式是指计算机系统中多字节数据的存储方式和传输方式,它主要分为大端模式(Big-Endian)和小端模式(Little-Endian)。原创 2024-05-19 05:45:00 · 1236 阅读 · 0 评论 -
C++之uintptr_t、union、struct组合用法实例(二百七十五)
本篇目的:C++之uintptr_t、union、struct组合用法实例C++ 是一种功能强大的编程语言,它提供了丰富的数据类型以满足各种编程需求。在本教程中,我们将介绍 C++ 中的 uintptr_t、union 和 - struct 三种数据类型。uintptr_tuintptr_t 是 C++ 标准库中定义的一个无符号整数类型,它的作用是表示一个指针值。uintptr_t 类型可以存储任何类型的指针,并且可以保证指针在不同平台和编译器之间的一致性。原创 2024-05-19 02:30:00 · 881 阅读 · 0 评论 -
C++之无符号整数类型:uintptr_t用法实例(二百七十四)
本篇目的:C++之无符号整数类型:uintptr_t用法实例uintptr_t 是 C++ 中的一个整数类型,定义在 头文件中。它是一个无符号整数类型,用于存储指针的值,通常被设计为和指针类型的大小相同,以确保在不同平台上能正确表示指针值。uintptr_t 主要用于在指针值和整数值之间进行类型转换,这在一些情况下很有用。例如,当需要在不同的数据结构中存储指针值时,或者需要将指针值以整数形式进行传递或存储时,可以使用 uintptr_t 类型。原创 2024-05-18 04:45:00 · 1218 阅读 · 0 评论 -
C++之指针算术管理内存用法实例(二百七十三)
本篇目的:在Android Binder通信中,发现使用C++的指针算术管理内存的方式,分享给大家。在C++语言中,指针算术是一种强大的特性,它允许开发者通过指针进行内存的管理和操作。指针算术基于两个基本概念:指针的基类型和指针的偏移量。指针的基类型是指指针所指向的数据类型的长度,而指针的偏移量是指从指针所指向的位置到目标数据的位置的距离。在C++中,指针算术运算主要包括以下几种:指针的自增(自减)运算:指针的自增(自减)运算是指将指针向后(向前)移动一个基类型的长度。例如,对于一个指向int。原创 2024-05-17 02:45:00 · 1335 阅读 · 0 评论 -
C++之容器:双端队列queue用法实例(二百七十二)
本篇目的:C++之容器:双端队列queue用法实例C++ 中的 deque 是一种容器,全称为 double-ended queue,即双端队列。它支持在两端进行元素的插入和删除操作,具有较高的效率。deque 是 C++ STL(标准模板库)中的一部分,使用时需要包含头文件。deque 的主要特点如下:两端操作:deque 支持在两端进行元素的插入和删除。这意味着可以在队列的前端(头部)和后端(尾部)分别进行 push 和 pop 操作,类似于生活中的队列和栈。原创 2024-05-15 09:36:49 · 807 阅读 · 0 评论 -
C++与java回调函数用法区别实例(二百七十一)
本篇目的:C++与java回调函数用法区别实例Java 和 C++ 中的回调函数在实现上有一些区别,主要是由于两种语言的不同特性和编程范式所导致的。原创 2024-05-06 09:43:16 · 742 阅读 · 3 评论 -
C++之realloc用法及代码实例(二百七十)
本篇目的:C++中,一个内存管理的重要函数,可以重新分配内存大小,随分享之。C++ 中的realloc函数是一个重要的内存管理函数,用于动态分配和释放内存。它可以改变已分配的内存块的大小,如果需要增加内存空间,则分配一个新的更大的内存块,然后将原内存块的内容复制到新块中,并释放原内存块。如果需要减少内存空间,则尝试将内存块的大小减少到新的大小,并返回调整后的内存块地址。realloc函数的原型为:其中,ptr是指向之前分配的内存块的指针,size是要分配的新内存块的大小(以字节为单位)。如果ptr为。原创 2024-04-08 17:02:00 · 920 阅读 · 0 评论 -
C++之链表与哈希表的作用及代码实例(二百六十九)
本篇目的:了解链表和哈希表的作用,再用C++实例说明。存储有序数据集合:链表是一种数据结构,用于存储有序的元素集合。每个元素(节点)都包含了指向下一个元素的指针,从而形成了一个有序的序列。动态内存分配:链表的节点通常可以动态分配内存,这使得链表能够在运行时动态增长和收缩,不需要预先指定存储空间的大小。插入和删除操作:链表的插入和删除操作非常高效,时间复杂度为 O(1),因为只需要修改相邻节点的指针,而不需要移动整个数据集合。实现其他数据结构:链表可以用于实现其他数据结构,如队列、栈、图的邻接表等。原创 2024-04-06 06:15:00 · 672 阅读 · 0 评论 -
C++之双向链表与哈希链表用法区别实例(二百六十八)
本篇目的:在阅读Linux内核代码时,发现Binder驱动中的双向链表和哈希链表的挺有意思,分享给大家。在Android的Binder区域中,双向链表(struct list_head)和哈希链表(struct hlist_node)是两种不同的数据结构,它们在实现中有一些区别和各自的作用。首先,让我们了解这两种数据结构的基本概念:双向链表(struct list_head)双向链表是一种数据结构,其中每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中,节点可以双向遍历。原创 2024-04-06 05:00:00 · 800 阅读 · 0 评论 -
C++之std::variant关键字代码实例(二百六十七)
本篇目的:C++之std::variant关键字代码实例std::variant 是 C++17 标准库中的一个模板类,它用于表示一个可以容纳多种不同类型值的类型安全的联合(union)。std::variant 提供了一种方便的方式来处理多种可能类型的值,而无需使用复杂的继承结构或联合,同时保持了类型的安全性。原创 2024-04-04 07:30:00 · 528 阅读 · 0 评论 -
C++之结构体初始化10种写法总结(二百六十六)
本篇目的:C++之结构体初始化10种方式总结。原创 2024-04-03 08:57:30 · 898 阅读 · 0 评论 -
C++之优化Linux内核结构体用智能指针std::unique_ptr与std::make_unique分配内存总结(二百六十五)
本篇目的:C++之结构体使用智能指针std::unique_ptr与std::make_unique分配内存总结在C++中,结构体(struct)是一种用户定义的数据类型,它允许我们组合多个不同类型的数据项,形成一个单一的复合数据类型。当结构体中包含动态分配的内存时,管理这些内存就变得尤为重要。std::unique_ptr和std::make_unique是C++11引入的两个智能指针工具,它们能够帮助我们自动管理这些动态分配的内存。使用std::unique_ptr管理结构体内存。原创 2024-04-02 17:27:00 · 1050 阅读 · 0 评论 -
C++之智能指针std::unique_ptr与std::make_unique分配内存方式总结(二百六十四)
本篇目的:C++之智能指针分配内存方式总结std::unique_ptr和std::make_unique是C++11引入的两个重要的智能指针,它们的主要目的是自动管理动态分配的内存,防止内存泄漏,并简化资源的生命周期管理。下面是对这两个工具的详细介绍。std :: unique_ptr是一个独占所有权的智能指针。这意味着,同一时间内,只能有一个unique_ptr指向某个对象。当unique_ptr对象被销毁(例如离开作用域)时,它所指向的对象也会被自动删除。原创 2024-04-02 17:26:21 · 1220 阅读 · 0 评论 -
C++之红黑树插入+查找功能实例(二百六十三)
本篇目的:C++之红黑树插入+查找实例红黑树是一种自平衡二叉查找树,它能够保持树的平衡,从而确保查找、插入和删除操作的最坏情况时间复杂度为O(log n)。红黑树通过约束节点的颜色和规则来保持平衡,这些规则包括:每个节点非红即黑。根节点是黑色的。所有叶子节点(NIL节点)是黑色的。若一个节点是红色的,则它的子节点都是黑色的。从任意节点到其每个叶子节点的所有路径都包含相同数量的黑色节点。原创 2024-03-29 10:30:21 · 747 阅读 · 0 评论 -
C++之std::atomic<bool>原子bool类型与普通bool区别(二百六十二)
本篇目的:C++之std::atomic原子bool类型与普通bool区别std::atomic 是 C++11 标准库中的一个模板特化,用于表示一个可以原子操作的布尔值。原子操作意味着这些操作是不可中断的,即在多线程环境中,当一个线程正在执行原子操作时,其他线程无法同时访问或修改这个值。与普通的 bool 类型相比,std::atomic 有以下主要区别和用途:线程安全:普通的 bool 类型不是线程安全的。原创 2024-03-28 12:04:54 · 1588 阅读 · 0 评论 -
C++之std::atomic原子量与std::mutex互斥锁解决多线程乱序问题(二百六十一)
本篇目的:C++之std::atomic原子量解决多线程乱序问题std::atomic模板类的作用:在C++ 环境中,static std::atomic是一个线程安全类型,它允许你在多线程环境中无锁地读取和修改其值。static 关键字则意味着这个变量是静态的,它会在整个程序的生命周期内存在,并且在所有对该变量的引用中共享相同的内存地址。std::atomic 是C++标准库中的一个模板类,用于表示原子类型的对象。原创 2024-03-28 11:56:06 · 880 阅读 · 0 评论 -
C++之char16_t*与char*类型相互转换(二百六十)
本篇目的:C++之char16_t与char类型相互转换char16_t 是一个在 C++11 中引入的无符号 16 位字符类型。它是一个标准类型,在头文件中定义。char16_t 设计用于存储 Unicode 字符,可以表示大多数常用字符,包括中文字符。在 C++11 之前,Unicode 字符通常使用 char 类型存储,但 char 类型是 signed char,可以表示 -128 到 127 的值,这意味着它不能正确定义许多 Unicode 字符。原创 2024-03-25 08:30:00 · 630 阅读 · 0 评论 -
C++之reinterpret_cast与static_cast用法区别(二百五十九)
本篇目的:C++之reinterpret_cast与static_cast用法区别用于执行底层的、不安全的类型转换,将一个指针转换为另一种类型的指针,或者将任何类型的指针转换为void指针。不进行类型检查,主要用于执行强制转换,潜在地导致未定义的行为。通常用于处理底层的、与内存相关的操作。总体而言:reinterpret_cast主要用于底层的、不安全的任意类型之间的转换。而static_cast用于更为安全的类型转换,确保在类型之间存在一定的关联性的类型转换:例如:父类和子类。原创 2024-03-14 08:00:00 · 660 阅读 · 0 评论 -
C++之模板类如何继承类实例(二百五十八)
本篇目的:在Android车载系统代码中,发现模板类继承类实例的例子,分享给大家。C++模板类是C++编程语言中一种特殊类型的类,它允许程序员编写可重用的代码,同时保持类型安全和灵活性。模板类是一种泛型编程的工具,它可以创建通用的类,能够处理各种数据类型。模板类的核心思想是参数化类型。在定义模板类时,程序员使用一个或多个类型参数来代替具体的类型。这些类型参数在实例化模板类时由具体的类型替代,从而使得模板类能够适用于不同的数据类型。原创 2024-02-17 18:17:36 · 1007 阅读 · 0 评论 -
C++之类继承隐式转换实例(二百五十七)
本篇目的:在看Android音频混音部分时,被一个代码隐式转换搞蒙了,提取出其抽象源码,其实很简单,分享给大家。类继承是面向对象编程中的一个核心概念,它允许程序员定义一个基类(或称为父类)和从该基类派生出来的子类。子类继承父类的属性和方法,同时可以添加自己的新属性和方法。隐式转换(或称为自动类型转换)是在类继承层次结构中,子类对象可以自动地被当作父类对象使用的过程。在类继承中,子类是一种特殊的父类,即“is-a”关系。这意味着,如果一个类继承自另一个类,那么子类对象就可以被视为父类对象的一种。原创 2024-01-28 23:54:45 · 919 阅读 · 0 评论 -
C++20结构化绑定应用实例(二百五十六)
本篇目的:C++20结构化绑定应用实例。C++20 引入了一种新的特性:结构化绑定(Structured Binding),这是一种简化数组和结构体(struct)初始化的方式。结构化绑定允许你将数组或结构体的元素或成员分别绑定到新的变量名,从而使得代码更加清晰和易读。结构化绑定主要针对数组和结构体类型的初始化。当你声明一个数组或结构体变量,并给它赋初值时,你可以使用结构化绑定来将初值中的每个元素或成员分别绑定到一个新的变量名。原创 2024-01-13 23:07:35 · 1220 阅读 · 0 评论 -
C++之使用与不使用std::move区别(二百五十五)
本篇目的:理解C++之使用与不使用std::move的区别。std::move是 C++11 引入的一个函数模板,主要用于转移指针的所有权。std::move将对象的所有权从一个对象转移到另一个对象,通过将参数转换为右值引用,实现对移动语义的支持。避免不必要的拷贝:在某些情况下,可以通过使用std::move来避免不必要的拷贝操作,减少资源消耗。支持移动语义:通过使用std::move,可以明确表示对于某个对象的移动操作,以提高性能和减少内存占用。原创 2023-11-15 14:26:15 · 215 阅读 · 0 评论 -
C++之函数中实现类与调用总结(二百五十四)
本篇目的:理解C++之函数中实现类与调用实例用法public:int age;return 0;int height;return 0;return 0;原创 2023-11-08 15:36:32 · 174 阅读 · 0 评论 -
C++之回调函数使用和不使用using、typedef、function定义总结(二百五十三)
本篇目的:理解C++之回调函数不使用using、typedef、function总结1.回调函数是一种在编程中常用的设计模式,它是一种将函数作为参数传递给另一个函数的技术。这种方式允许我们在一个函数内部调用另一个函数,而这个被调用的函数是作为参数传递进来的。2.回调函数的主要用途是实现事件驱动编程和异步编程。在事件驱动编程中,当某个事件(如用户点击、网络请求完成等)发生时,会调用预先定义的回调函数来处理这个事件。原创 2023-10-29 23:10:45 · 586 阅读 · 0 评论 -
C++之Args可变参数模板总结(二百五十二)
本篇目的:理解C++之Args可变参数模板用法。C++中,Args是一个通用的模板参数,用于表示一个参数包。它可以用于函数模板、类模板以及其他支持模板参数的上下文中。1. **函数模板参数包Args是一个通用的模板参数,用于表示一个参数包。它可以用于函数模板、类模板以及其他支持模板参数的上下文中,用于接受任意数量的参数或多个类型参数。通过使用参数包展开的方式,可以在模板中处理不定数量的参数或多个类型参数。原创 2023-10-29 22:23:33 · 681 阅读 · 0 评论 -
C++之C++11引入enum class与传统enum关键字区别总结(二百五十一)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法C++11引入的enum class关键字来定义枚举传统的enum关键字定义枚举作用范围:enum class创建了一个作用域限定的枚举类型,而enum则创建了一个隐式的全局作用域枚举类型。这意味着使用enum class定义的枚举成员在枚举之外是不可见的,需要通过作用域解析运算符(::)来访问。默认类型安全性:enum class提供了更严格的类型安全性,不允许隐式的整数转换。原创 2023-10-29 18:04:30 · 368 阅读 · 0 评论 -
C++之左值、右值、std::forward、std::move总结(二百五十)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法C++中的左值(lvalue)和右值(rvalue)是表达式的属性,用于表示它们在赋值操作中的行为和特性。左值(lvalue)表示一个可以标识内存位置的表达式,它可以出现在赋值语句的左边或右边。左值可以被引用(可以取得其地址)并且在程序的生命周期中保持稳定。简而言之,左值可以出现在等号左边或右边,并且在其他表达式中可以被引用。右值(rvalue)表示一个临时的、无法标识内存位置的表达式,它只能出现在赋值语句的右边。原创 2023-10-28 22:08:27 · 299 阅读 · 0 评论 -
C++之lambda匿名、using、typedef总结【全】(二百四十九)
本篇目的:理解C++之lambda匿名函数、typedef、using等用法Lambda函数是一种匿名函数,可以在C++中使用。它提供了一种简洁的方式来定义和使用临时的函数对象。Lambda函数通过使用方便的语法来简化函数对象的创建过程,使代码更加简洁和易读。Capture列表:指定Lambda函数所捕获的外部变量。它可以是值捕获(通过值进行拷贝)或引用捕获(通过引用进行访问)的方式。参数列表:指定Lambda函数的参数。返回类型:指定Lambda函数的返回类型(可以省略,编译器会自动推断)。原创 2023-10-28 11:13:42 · 207 阅读 · 0 评论 -
C++之C++11字符串字面量后缀总结(二百四十八)
本篇目的:理解C++11字符串字面量后缀总结。C++11引入了字符串字面量后缀,可以用于在字符串字面量的末尾添加后缀以指定其类型。这样做的好处是增强了类型安全性,使得字符串字面量可以根据后缀的类型进行解析和处理。以下是一些常用的字符串字面量后缀:后缀"s":用于表示字符串字面量,其类型为。例如:"hello"s表示类型为的字符串。后缀"u8":用于表示UTF-8字符串字面量,其类型为。例如:"你好"u8表示类型为的UTF-8字符串。后缀"u":用于表示宽字符字符串字面量,其类型为。原创 2023-10-26 17:48:41 · 378 阅读 · 0 评论 -
C++之#pragma once实例总结(二百四十七)
本篇目的:理解C++之#pragma once用法总结。#pragma once是一种预处理指令,用于告诉编译器在编译过程中只包含一次特定的头文件。它是一种非标准的C++语言扩展,主要用于避免头文件被重复包含。在C++中,头文件经常被用来包含代码的声明或定义,然后在其他源文件中进行引用。当多个源文件都包含同一个头文件时,如果没有适当的预处理指令,会导致重复定义和编译错误。原创 2023-10-26 17:13:11 · 327 阅读 · 0 评论 -
C++之Linux syscall实例总结(二百四十六)
本篇目的:理解Linux的syscall作用和用法。Linux的系统调用(System Call,简称syscall)是用户态程序与内核态之间进行交互的重要接口。通过系统调用,用户程序可以请求操作系统内核提供的特权功能,例如文件操作、进程管理、网络通信等。Linux系统中的系统调用通常采用软中断的方式实现。当用户程序需要使用系统调用时,它会通过指令将处理器从用户态切换到内核态,并触发软中断异常。操作系统内核会根据中断号(系统调用号)来确定需要执行的系统调用函数,进行相应的处理,然后返回结果给用户程序。原创 2023-10-26 14:39:49 · 520 阅读 · 0 评论 -
C++之lambda匿名函数总结(二百四十五)
本篇目的:理解C++之lambda匿名函数用法总结。Lambda函数是C++11引入的一种匿名函数的方式,它可以在需要函数对象的地方快速定义一个临时的函数。Lambda函数的语法相对简洁,可以方便地捕获局部变量,并且可以作为参数传递给其他函数。// 函数体其中,capture是指捕获的变量列表,可以是空的、值传递方式或引用传递方式。parameters是形参列表,可以为空或包含一个或多个形参。是返回类型,可以省略(根据函数体自动推断)或明确指定。函数体是具体的函数实现。原创 2023-10-25 20:38:54 · 475 阅读 · 0 评论 -
C++之struct匿名结构体实例(二百四十四)
本篇目的:理解C++之struct匿名结构体用法。C++中的“匿名结构体”通常也被称为“无名结构体”或“未命名结构体”,是指在结构体定义时没有给予其一个特定的名称。它与普通的有名结构体相比,在语法上有一些差异和特殊用法。匿名结构体和有名结构体的定义语法相同,都是使用struct关键字,但不提供名称。定义匿名结构体主要用于临时的数据组织和封装,通常作为其他数据类型(如类、其他结构体)的成员。} student;在上述代码中,我们使用匿名结构体定义了一个名为。原创 2023-10-22 01:03:40 · 964 阅读 · 0 评论 -
C++之委托构造函数实例(二百四十三)
本篇目的:理解C++之委托构造函数用法。委托构造函数是C++11引入的一个特性,允许某个构造函数在初始化列表中调用同一个类中的其他构造函数。这样可以避免代码重复,提高代码的可维护性和重用性。在C++中,一个类可以有多个构造函数,每个构造函数负责初始化对象的不同部分或者提供不同的参数选项。在某些情况下,多个构造函数会有一些共同的初始化代码,这就会导致代码冗余。委托构造函数解决了这个问题,让一个构造函数可以重用其他构造函数的初始化代码。原创 2023-10-14 00:22:47 · 254 阅读 · 0 评论 -
C++之make_unique、namespace、class类总结(二百四十二)
本篇目的:理解C++之make_unique、namespace、class类用法。是 C++14 中引入的一个函数模板,用于创建一个独占所有权的智能指针(它可以动态分配内存并初始化对象,并且在构造函数抛出异常时自动释放内存,从而避免了内存泄漏的风险。函数接受构造函数参数并返回包含该对象的unique_ptr。使用可以简化动态内存分配的过程,并提高代码的安全性。namespace:命名空间是一种将全局作用域分割为不同部分的机制,以避免命名冲突。命名空间可以包含变量、函数、类和其他命名空间。原创 2023-10-13 17:29:32 · 361 阅读 · 0 评论 -
C++之容器类有趣的实验(二百四十一)
本篇目的:理解C++之向容器中添加nullptr空指针,容器size()会增大吗?为什么?通过C++的20个容器类进行实验,看看有什么结果?C++提供了多种容器,以下是常用的20个容器及其举例:数组 (array):固定大小的连续存储空间。例如:int numbers[5] = {1, 2, 3, 4, 5}。向量 (vector):可变大小的动态数组。例如:vector numbers = {1, 2, 3, 4, 5}。列表 (list):双向链表。原创 2023-09-29 00:30:27 · 210 阅读 · 0 评论