# 3_c++练习 **Repository Path**: zero2200/3_cpp-practice ## Basic Information - **Project Name**: 3_c++练习 - **Description**: 1.记录个人的c++编程代码。 标准库,STL,模板等 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-12-31 - **Last Updated**: 2025-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1.个人 c++代码测试.验证.小功能开发 编辑器 vscode 调试器 gdb 编译器 g++ / clang 系统 ubuntu/debian 构建工具 scons (python 语法的 make/cmake 构建) 内容介绍 1. c++ 基本语法 + 关键字 2. c++ 类 + 构造 + 析构 + 拷贝构造 + 拷贝赋值 + 移动构造 + 移动赋值 3. c++ string 字符串 5. c++ 模板 6. c++ 多线程 7. c++ 网络编程 8. ~~c++ 数据库~~ 9. ~~c++ 算法~~ 10. c++ 设计模式 11. c++ 内存管理 12. c++ 调试 13. ~~c++ 性能优化~~ github 无法使用 ssh 推送代码,迁移到 gitee: git@gitee.com:zero2200/3_cpp-practice.git # 1.C++基本语法 ## 1.string 字符串 - [string\_拼接格式化: buf1+buf2](2_string/1_string_拼接格式化.cpp) - [函数返回 string: return string](2_string/3_string_函数返回string值.cpp) - [sstream 格式化拼接 snprintf](2_string/3_sstream/1_stringstream_字符串拼接_格式化_snprintf.cc) - [sstream 格式化拆分 sscanf](2_string/3_sstream/2_stringstream_字符串_格式化拆分_sscanf.cc) fmt 字符串格式化库: [4*fmt_format*字符串格式化.cc](2_string\3_sstream\4_fmt_format_字符串格式化.cc) [3_format 字符串格式化.cc](2_string\3_sstream\3_format字符串格式化.cc) format 字符串格式化: [1*format*字符串格式化.cc](2_string\4_format字符串格式化\1_format_字符串格式化.cc) substr 字符截取: [6*string.substr*字符截取.cc](2_string\6_string.substr_字符截取.cc) 数字转换 - [inr float 转 string](2_string/5_int_float转string.cc) ## 2.reference 引用 - [引用参数](1_base/5_reference_引用/1_引用作为参数.cpp) - [引用参数-->返回引用结果](1_base/5_reference_引用/2_引用参数_返回引用.cpp) - [string 字符串引用](1_base/5_reference_引用/6_string_函数引用_修改字符串.cpp) - [类的引用成员 初始化: class.&a 初始化](1_base/5_reference_引用/3_类-引用成员初始化.cc) - [指针转引用 方法 --> 仅函数引用参数有效](1_base/5_reference_引用/4_指针转引用.cc) - [char\[\] 数组转引用](1_base/5_reference_引用/5_char_做引用.cc) -->编译失败 ## 3.class 类 ### 1.构造 - [类的-成员 初始化](3_class/4_class类构造_析构/2_类的-类成员_初始化.cpp) - [类的-引用成员 初始化](1_base/5_reference_引用/3_类-引用成员初始化.cc) - [父类-引用子类]() --父类不能引用子类的函数,成员, 设计不合理,请重新设计 - [copy_constructor 拷贝构造](3_class/5_拷贝构造copy_constructor/5_copy_constructor拷贝构造.cpp) - [copy_constructor 无拷贝构造 执行一次构造,二次析构](3_class/5_拷贝构造copy_constructor/6_copy_constructor_无拷贝构造_1次构造_2次析构_异常现象.cpp) ### 2.拷贝构造_拷贝赋值_移动构造_移动赋值 [1_rvalue-references-move-semantics_右值引用_移动赋值.cc](3_class\05_拷贝构造_拷贝赋值_移动构造_移动赋值\1_rvalue-references-move-semantics_右值引用_移动赋值.cc) [5_copy_constructor拷贝构造.cc](3_class\05_拷贝构造_拷贝赋值_移动构造_移动赋值\5_copy_constructor拷贝构造.cc) [6_copy_constructor_无拷贝构造_1次构造_2次析构_异常现象.cc](3_class\05_拷贝构造_拷贝赋值_移动构造_移动赋值\6_copy_constructor_无拷贝构造_1次构造_2次析构_异常现象.cc) [21_move_右值引用.cc](3_class\05_拷贝构造_拷贝赋值_移动构造_移动赋值\21_move_右值引用.cc) [22_move_右值引用实现.cc](3_class\05_拷贝构造_拷贝赋值_移动构造_移动赋值\22_move_右值引用实现.cc) ### 3.虚函数 - [1.无虚函数重写 +gdb 查看内存](3_class/8_virtual虚函数/1_无虚函数-重写.cpp) - [2.虚函数重写 +gdb 查看内存](3_class/8_virtual虚函数/1.1_有虚函数_重写.cpp) - [sizeof class 类 占用空间大小](3_class/6_sizeof_class类大小/1_class_sizeof.cpp) - [sizeof class 虚函数 占用空间大小](3_class/6_sizeof_class类大小/2_sizeof_虚函数-对齐-静态数据大小.cpp) - [sizeof class 类多个虚函数 占用空间大小](3_class/6_sizeof_class类大小/3_sizeof_类包含多个虚函数.cpp) ### 4.多态 - [多态函数表查看](3_class/7_多态/1_多态查看.cpp) ### 5.static - [类-static 成员 初始化](1_base/9_static/class_static/1_类_static成员_初始化.cc) - [类-static 指针成员 初始化](1_base/9_static/class_static/2_类_static_指针成员_初始化.cc) ## 5.vector/list/map 数据结构 ### 1.vector 动态矢量数组 - [vector 实例](4_container/vector) - vector 通过数组初始化 [vector*array*数组相互转换.cc](4_container/vector/10_vector_array_数组相互转换.cc) [5_vector定位_at.cpp](4_container\vector\5_vector定位_at.cpp) [6_vector_迭代器计算.cpp](4_container\vector\6_vector_迭代器计算.cpp) [7_vector_size大小.cpp](4_container\vector\7_vector_size大小.cpp) [8_vector_insert_earse_modify_增-删-改.cpp](4_container\vector\8_vector_insert_earse_modify_增-删-改.cpp) [9_vector_capacity容量.cpp](4_container\vector\9_vector_capacity容量.cpp) [10_vector_array_数组相互转换.cc](4_container\vector\10_vector_array_数组相互转换.cc) [11_vector_int定位.cc](4_container\vector\11_vector_int定位.cc) [12_vector_string_引用定位.cc](4_container\vector\12_vector_string_引用定位.cc) [13_vector_现代化初始化.cc](4_container\vector\13_vector_现代化初始化.cc) [14_vector_获取地址_长度.cc](4_container\vector\14_vector_获取地址_长度.cc) [15_string_转vector.cc](4_container\vector\15_string_转vector.cc) ​ [15.1_struct结构体_转vector_uint8_t.cc](4_container\vector\15.1_struct结构体_转vector_uint8_t.cc) [31_exp_vector搜索.cpp](4_container\vector\31_exp_vector搜索.cpp) ### 2.list 列表 - [list 实例](4_container/list) ### 3.map 映射/字典 - [map 实例](4_container/map) - [map c++20 现代化遍历](4_container/map/12_map_函数指针_现代化初始化.cc) - [map ](4_container/map/11_map_函数指针.cc) - [类构造函数中, 初始化 map](4_container/map/13_map_类里面初始化.cc) ### 4 queue 队列 - [queue 队列](4_container/4_queue队列/1_queue队列.cpp) [2_queue_最大队列.cc](4_container\4_queue队列\2_queue_最大队列.cc) ### 5 deque 双端队列 - [deque 双端队列](4_container/5_deque双端队列/1_deque_双端队列.cpp) - [deque 双端队列 增删改查](4_container/5_deque双端队列/2_deque增删改查.cpp) ## 6.语法 - [explicit 显示转换](1_base/6_explicit显示转换/1_explicit显示转换.cc) - ### 09 static - [类*static 成员*初始化](1_base/9_static/class_static/1_类_static成员_初始化.cc) - [类*static 指针成员*初始化](1_base/9_static/class_static/2_类_static_指针成员_初始化.cc) ### 13 namespace 命名空间 - [namespace\_命名空间引用](1_base/13_namespace/1_namespace_命名空间引用.cpp) - [usring namespace 命名空间\_直接引用](1_base/13_namespace/2_namespace_usring命名空间_直接引用.cpp) - [namespace 命名空间 实例](1_base/13_namespace/3_多文件namespace实例) ### 14 exten_C 导入 C 语言 [1*extern_C*测试 add.cc](1_base\14_extern_C导入C语言模块\1_extern_C_测试add.cc) [2_extern_C_c++中函数以 C 模式编译.cc](1_base\14_extern_C导入C语言模块\2_extern_C_c++中函数以C模式编译.cc) ### 15 xxx_cast 强制类型转化 [11*static_cast*强制类型转化.cc](1_base\15_类型转化xxx_cast\11_static_cast_强制类型转化.cc) [21*dynamic_cast*子类强制指向父类.cc](1_base\15_类型转化xxx_cast\21_dynamic_cast_子类强制指向父类.cc) [31*const_cast*常量转变量.cc](1_base\15_类型转化xxx_cast\31_const_cast_常量转变量.cc) [41_reinterpret_cast_void 指针任意类型转化.cc](1_base\15_类型转化xxx_cast\41_reinterpret_cast_void指针任意类型转化.cc) ### 16 unique 智能指针 - [智能指针](7_关键字/1_unique智能指针/1_make_unique指针指针.cc) [11*unique_ptr*独占指针.cc](1_base\16_智能指针\11_unique_ptr_独占指针.cc) [21*shared_ptr*共享智能指针.cc](1_base\16_智能指针\21_shared_ptr_共享智能指针.cc) [21.1*shared_ptr*共享智能指针\_后初始化.cc](1_base\16_智能指针\21.1_shared_ptr_共享智能指针_后初始化.cc) [21.2*shared_ptr*共享智能指针\_通过参数赋值智能指针.cc](1_base\16_智能指针\21.2_shared_ptr_共享智能指针_通过参数赋值智能指针.cc) [22*shared_ptr*通过 make_shared 创建.cc](1_base\16_智能指针\22_shared_ptr_通过make_shared创建.cc) [31*weak_ptr*弱引用指针.cc](1_base\16_智能指针\31_weak_ptr_弱引用指针.cc) ## 关键字 ### explicit 显示转化 [1_explicit 显示转换.cc](1_base\6_explicit显示转换\1_explicit显示转换.cc) ### auto decltype 自动类型推导 ```c int a = 2; decltype(a) b = 3; // 推导 class A 类型 A a1 = A(2); decltype(a1) a2 = 5; ``` [1*decltype*自动推导数据类型.cpp](1_base\7_auto_decltype自动类型推导\1_decltype_自动推导数据类型.cpp) [2*decltype*推导类.cpp](1_base\7_auto_decltype自动类型推导\2_decltype_推导类.cpp) - [decltype 自动类型推导](1_base/7_auto_decltype自动类型推导/1_decltype_自动推导数据类型.cpp) - [decltype class 自动类型推导](1_base/7_auto_decltype自动类型推导/2_decltype_推导类.cpp) ### functional 可调用对象\_bind 绑定 [1*functional*可调用对象\_说明与实例.cc](7_关键字\02_functional可调用对象_bind绑定\1_functional_可调用对象_说明与实例.cc) [21*bind*绑定函数.cc](7_关键字\02_functional可调用对象_bind绑定\21_bind_绑定函数.cc) [22*bind*绑定函数\_多种参数.cc](7_关键字\02_functional可调用对象_bind绑定\22_bind_绑定函数_多种参数.cc) [23*bind*绑定函数\_函数参数为引用.cc](7_关键字\02_functional可调用对象_bind绑定\23_bind_绑定函数_函数参数为引用.cc) [24*bind*绑定函数\_类的成员函数.cc](7_关键字\02_functional可调用对象_bind绑定\24_bind_绑定函数_类的成员函数.cc) [25*map_bind*关联\_类的成员函数.cc](7_关键字\02_functional可调用对象_bind绑定\25_map_bind_关联_类的成员函数.cc) [26*map_bind 绑定函数*在类里面*初始化关联*类的成员函数.cc](7_关键字\02_functional可调用对象_bind绑定\26_map_bind绑定函数_在类里面_初始化关联_类的成员函数.cc) ### noexcept\_不抛出异常优化 [03*noexcept*不抛出异常优化.cc](7_关键字\03_noexcept_不抛出异常优化.cc) ### constexpr\_编译时计算表达式 [15*constexpr*编译时计算表达式.cc](13_c++modern_现代语法\15_constexpr_编译时计算表达式.cc) ## 7.int float double 基本数据类型 - [int 2 进制 8 进制 16 进制表达方式](1_base/8_int_float_double基本数据类型/1_int_2进制_8进制_16进制表达.cc) - [sizeof char, int, long ,long long, float, double 占用内存大小](1_base/12_sizeof_对象占用内存空间大小/1_limit_number_size.cpp) ## 11.try_catch accsert 异常 - [accsert 断言](1_base/7_assert_try_catch异常/1_accsert.cc) - [uint8_t unsigned char 计算溢出](1_base/3_整数溢出/1_1字节溢出.cpp) ## 12.templat 模板 - [template 模板: add](5_template/1_template_add实现.cpp) - [template 模板: swap 交换](5_template/2_template_swap实现.cpp) --- # 2.默认库 ## thread 线程库 - [线程参数*值*地址\_引用](1_base/11_多线程/3_线程传递_地址_引用参数.cc) - [线程函数\_为类的成员函数](1_base/11_多线程/5_thread_线程_类的成员函数.cc) ## chrono 时间 - [chrono\_获取当前时间戳](6_c++库/2_chrono_时间/1_chrono_获取当前时间戳.cc) - [2_chrono_延时.cc](6_c++库\2_chrono_时间\2_chrono_延时.cc) ## 03 fstream 文件读写 [1*ofstream*写文件.cc](6_c++库\03_fstream_文件读写\1_ofstream_写文件.cc) [2*ifstream*读文件.cc](6_c++库\03_fstream_文件读写\2_ifstream_读文件.cc) ## 04 coroutines 协程 [1_coroutines_协程实例.cc](6_c++库\04_coroutines_协程\1_coroutines_协程实例.cc) ## 05 sync 异步编程 [1_async_异步编程.cc](6_c++库\05_async_异步编程\1_async_异步编程.cc) --- # 3.开源库 ## 02 ZeroMQ 通信中间件 [1_zmqpp_sub 订阅端.cc](21_开源库/02_zeromq/1_zmqpp_sub订阅端.cc) [2_zmqpp_pub 发布端.cc](21_开源库/02_zeromq/2_zmqpp_pub发布端.cc) [3_zmqpp_server](21_开源库/02_zeromq/3_zmqpp_server.cc) [4_zmqpp_client](21_开源库/02_zeromq/4_zmqpp_client.cc) [5_zmq_server](21_开源库/02_zeromq/5_zmq_server.c) [6_zmq_client](21_开源库/02_zeromq/6_zmq_client.c) [7*zmq_server*发送接受\_结构体](21_开源库/02_zeromq/7_zmq_server_发送接受_结构体.c) [8*zmq_client*发送接受\_结构体](21_开源库/02_zeromq/8_zmq_client_发送接受_结构体.c) [11_zmqpp_请求_应答_server.cc](21_开源库\02_zeromq\11_zmqpp_请求_应答_server.cc) [12_zmqpp_请求_应答_client.cc](21_开源库\02_zeromq\12_zmqpp_请求_应答_client.cc) [13_zmqpp_推送_拉取_pusher.cc](21_开源库\02_zeromq\13_zmqpp_推送_拉取_pusher.cc) [14_zmqpp_推送_拉取_puller.cc](21_开源库\02_zeromq\14_zmqpp_推送_拉取_puller.cc) [15_zmqpp_进场间通信_sender.cc](21_开源库\02_zeromq\15_zmqpp_进场间通信_sender.cc) [16_zmqpp_进场间通信_receiver.cc](21_开源库\02_zeromq\16_zmqpp_进场间通信_receiver.cc) ## 04 json 库 #### jsoncpp 库 [1*jsonCpp*解析字符串\_增.删.改.查.保存.cc](21_开源库\04_json\1_JsonCpp\1_jsonCpp_解析字符串_增.删.改.查.保存.cc) [2*jsonCpp*从文件读取.cc](21_开源库\04_json\1_JsonCpp\2_jsonCpp_从文件读取.cc) #### nlohmann-json -->推荐,语法更简洁,像 python [1*nlohmann_json*解析字符串.cc](21_开源库\04_json\2_nlohmann-json\1_nlohmann_json_解析字符串.cc) ## 05 spdlog 日志库 [1*spdlog*输出终端.cc](21_开源库\05_spdlog日志库\1_spdlog_输出终端.cc) [2*spdlog*输出到文件.cc](21_开源库\05_spdlog日志库\2_spdlog_输出到文件.cc) [3*spdlog*定时输出文件.cc](21_开源库\05_spdlog日志库\3_spdlog_定时输出文件.cc) [4*spdlog*不同的 logger\_函数输出效果.cc](21_开源库\05_spdlog日志库\4_spdlog_不同的logger_函数输出效果.cc) [11*sdblog*格式化实例.cc](21_开源库\05_spdlog日志库\11_sdblog_格式化实例.cc) [12*spdlog*输出到文件.cc](21_开源库\05_spdlog日志库\12_spdlog_输出到文件.cc) [13*spdlog*自定义格式输出\_pattern.cc](21_开源库\05_spdlog日志库\13_spdlog_自定义格式输出_pattern.cc) ## 06 Boost ### 网络库 Asio [1_http_service_Boost.Asio.cc](21_开源库\06_Boost\01_Boost网络库Asio\1_http_service_Boost.Asio.cc) [2_http_client_Boost.Asio.cc](21_开源库\06_Boost\01_Boost网络库Asio\2_http_client_Boost.Asio.cc) ### 协程库boost.coroutine2 [1_boost.coroutine2协程实例.cc](21_开源库\06_Boost\02_coroutine2协程库\1_boost.coroutine2协程实例.cc) [2_boost.coroutine2_协程.cc](21_开源库\06_Boost\02_coroutine2协程库\2_boost.coroutine2_协程.cc) ## 07 protobuf 序列化 [1_addressbook_protobuf实例.cc](21_开源库\07_protobuf\1_addressbook_protobuf实例.cc) [2_protobuf_person_序列号到字节.cc](21_开源库\07_protobuf\2_protobuf_person_序列号到字节.cc) ## 08 数学库 ### eigen3 线性代数 [1_eigen3_矩阵运算.cc](21_开源库\08_数学库\01_Eigen3线性代数库\1_eigen3_矩阵运算.cc) [2_eigen3_向量运算.cc](21_开源库\08_数学库\01_Eigen3线性代数库\2_eigen3_向量运算.cc) [3_eigen3_求解线性方程组.cc](21_开源库\08_数学库\01_Eigen3线性代数库\3_eigen3_求解线性方程组.cc) ## 12 MQTT 消息通信 [1_mosquitto_publish 发布.cc](21_开源库\12_mqtt\1_mosquitto_publish发布.cc) [2_mosquitto_subscribe 订阅.cc](21_开源库\12_mqtt\2_mosquitto_subscribe订阅.cc) ## 13 dbus 通信 [1_dbus_server.c](21_开源库\13_dbus\1_dbus_server.c) [2_dbus_client.c](21_开源库\13_dbus\2_dbus_client.c) [3_dbus_c_example.c](21_开源库\13_dbus\3_dbus_c_example.c) [4_dbus_c_example.c](21_开源库\13_dbus\4_dbus_c_example.c) [5_dbus-example.c](21_开源库\13_dbus\5_dbus-example.c) [6_bus_service_common.h](21_开源库\13_dbus\6_bus_service_common.h) [6_dbus_service.c](21_开源库\13_dbus\6_dbus_service.c) [7_dbus_client.c](21_开源库\13_dbus\7_dbus_client.c) ## 14 google开源库 ### gflags [1_gflags_命令行参数.cc](21_开源库\14_google\1_gflags_glog\1_gflags_命令行参数.cc) ### glogs [21_glogs_日志.cc](21_开源库\14_google\1_gflags_glog\21_glogs_日志.cc) [22_glog_写入文件.cc](21_开源库\14_google\1_gflags_glog\22_glog_写入文件.cc) ### gtests [1_gtest_测试数字.cc](21_开源库\14_google\2_gtest_单元测试框架\1_gtest_测试数字.cc) [2_gtest_测试string.cc](21_开源库\14_google\2_gtest_单元测试框架\2_gtest_测试string.cc) ## 17 easylogging 日志库 [1_easylogging_日志.cc](21_开源库\17_easylogging日志库\1_easylogging_日志.cc) [2_easylogging_读取配置.cc](21_开源库\17_easylogging日志库\2_easylogging_读取配置.cc) [3_easylogging_条件打印.cc](21_开源库\17_easylogging日志库\3_easylogging_条件打印.cc) # 设计模式 [11_SimapleFactoryMethod_简单工厂模式.cc](12_设计模式\01_create创造者模式\11_SimapleFactoryMethod_简单工厂模式.cc) [12_SimapleFactory_简单工厂.cc](12_设计模式\01_create创造者模式\12_SimapleFactory_简单工厂.cc) [21_Builder_建造者模式.cc](12_设计模式\01_create创造者模式\21_Builder_建造者模式.cc) [31_AbstractFactory_抽象工厂模式.cc](12_设计模式\01_create创造者模式\31_AbstractFactory_抽象工厂模式.cc) [41_Prototype_原型模式.cc](12_设计模式\01_create创造者模式\41_Prototype_原型模式.cc) [51_Singleton_单实例模式.cc](12_设计模式\01_create创造者模式\51_Singleton_单实例模式.cc) [52_Singleton_Parttern_通过call_once单实例模式.cc](12_设计模式\01_create创造者模式\52_Singleton_Parttern_通过call_once单实例模式.cc) [53_Singleton_单实例模式.cc](12_设计模式\01_create创造者模式\53_Singleton_单实例模式.cc) [61_InterpreterMethod_解释器模式.cc](12_设计模式\01_create创造者模式\61_InterpreterMethod_解释器模式.cc) [21_bridge_桥接模式.cc](12_设计模式\02_struct结构模式\21_bridge_桥接模式.cc) [11_adapter_适配器模式.cc](12_设计模式\02_struct结构模式\11_adapter_适配器模式.cc) # 外设 ## 08 蓝牙设备 [1_bluetooth 蓝牙扫描.c](25_外设模块\8_蓝牙bluetooth\1_bluetooth蓝牙扫描.c) [2_bluetooth_读写实例.c](25_外设模块\8_蓝牙bluetooth\2_bluetooth_读写实例.c) [3\_蓝牙 bluetooth_rfcomm_server.c](25_外设模块\8_蓝牙bluetooth\3_蓝牙bluetooth_rfcomm_server.c) [4\_蓝牙 bluetooth_rccomm_client.c](25_外设模块\8_蓝牙bluetooth\4_蓝牙bluetooth_rccomm_client.c) [5_bluetooth_l2cap-server.c](25_外设模块\8_蓝牙bluetooth\5_bluetooth_l2cap-server.c) [6_bluetooth_l2cap-client.c](25_外设模块\8_蓝牙bluetooth\6_bluetooth_l2cap-client.c)