C++
文章平均质量分 72
C++的编程学习
OceanStar的学习笔记
这个作者很懒,什么都没留下…
展开
-
C/C++编程目录总结
linux网络编程目录关于Linux服务器编程,我们有一些约定成俗的规范 Linux服务器程序一般以后台进程(也叫做守护进程(daemon))的形式运行。它没有控制终端,因而也不会意外接收到用户输入。守护进程的父进程是init进程(PID为1的进程) Linux服务器程序通常有一套日志系统,它至少能够输出日志到文件,有的还能输出日志到专门的UDP服务器。大部分后台进程都在/var/log目录下拥有自己的日志目录 Linux服务器程序一般以某个专门的非root身份运行。比如mysqld、httpd、转载 2020-07-08 15:47:07 · 2269 阅读 · 1 评论 -
盘点适合入门学习的C/C++开源项目
C项目名称: C项目简介: 是的,你没有看错,这个项目的名字就是单个字母C。C是一个宝藏项目,可以说是学习数据结构和刷算法题的利器,因为里面包含了几乎各种基础算法、数据结构、以及LeetCode算法题的C语言实现。具体包括:客户端/服务器问题统计方法问题进制转换问题各种数据结构:数组、链表、字典、二叉树、堆、栈、队列、哈希、图等等搜索/查找问题排序问题LeetCode习题其他杂项问题注意,下图中只是截取了一部分数据结构和算法题的具体实现:对于我们的作用: 可以帮助我们更好的学习数据转载 2020-07-01 09:57:25 · 25591 阅读 · 6 评论 -
C/C++编程:异步编程入门
背景在产品端开发软件多了,免不了遇到多线程处理的情况,这也符合多核、异构的现代化硬件发展的需求。多线程处理中常见的有两种应用情形:并行化算法处理。利用OpenMP/TBB等CPU并行库,或者CUDA/OpenCL等GPU并行库,将问题拆分成多个相互独立的子问题,通过并行库提供的原语来进行组织,调度多个子线程并行处理,再利用库提供的规约等操作,收集处理各个线程反馈的结果,形成最终的结果。在这类应用中,线程之间的数据交换是低频行为,尤其在算法设计阶段会刻意的避免线程之间的信息传递已达到高效处理的效果。本文转载 2021-02-03 18:05:45 · 4560 阅读 · 0 评论 -
C/C++:gcc选项-fno-access-control的使用
在测试代码时需要访问私有和保护成员,使用这个选项可以忽略访问控制。转载 2023-11-01 15:00:52 · 1321 阅读 · 1 评论 -
C++:进制转换
(1)二进制转十六进制。(2)十六进制转二进制。转载 2023-10-09 15:14:14 · 1222 阅读 · 0 评论 -
C/C++:absl:status
absl/status目录下包含两个Status库。翻译 2023-09-28 17:53:36 · 1376 阅读 · 0 评论 -
C/C++:std::get
模板函数std::get()是一个辅助函数,它能够获取到容器的第n 个元素。模板参数的实参必须是一个在编译时可以确定的常量表达式,编译时会对它检查。转载 2023-09-28 15:07:01 · 3401 阅读 · 0 评论 -
C++:使用 std::string_view避免字符串拷贝优化程序性能
当然这里明显是不符合预期的,尤其是std::string_view指向的字符串没有\0结束符的时候,程序很容易出现潜在的内存问题。有了std::string_view,函数参数不管是字符串数组指针,还是std::string,都不需要拷贝内存源字符串。虽然没有定义参数为std::string的std::string_view函数,下面的代码仍然可以通过编译。因为std::string类重载了std::string到std::string_view的转换操作符。std::string_view避免内存拷贝。转载 2023-09-28 10:27:33 · 576 阅读 · 0 评论 -
C/C++: benchmark
我们的例子将会对比三种访问std::array容器内元素方法的性能,进而演示benchmark的使用方法。012345我们可以看到每一个benchmark测试用例都是一个类型为std::function的函数,其中benchmark::State&负责测试的运行及额外参数的传递。转载 2023-09-27 15:11:38 · 804 阅读 · 0 评论 -
Bazel: 安装 Bazel
bazel中对于文件架构的概念有两个:workspace和package。转载 2023-09-27 14:52:27 · 2138 阅读 · 1 评论 -
C/C++编程:std::hypot 用法
计算 x 与 y 平方和的平方根。转载 2018-07-07 19:52:15 · 1043 阅读 · 1 评论 -
C/C++编程: STL advance()
反之,如果 it 为双向迭代器或者随机访问迭代器,则 n 为正数时表示将 it 右移(前进) n 个位置,n 为负数时表示将 it 左移(后退) n 个位置。注意,advance() 函数本身不会检测 it 迭代器移动 n 个位置的可行性,如果 it 迭代器的移动位置超出了合理范围,it 迭代器的指向将无法保证,此时使用 *it 将会导致程序崩溃。此程序中,由于 it 为前向迭代器,其只能进行 ++ 操作,即只能前进(右移),所以 advance() 函数的第 2 个参数只能为正数。转载 2023-02-13 17:34:35 · 149 阅读 · 0 评论 -
C/C++编程:find_first_of
定义于头文件 算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first, last) ,其中 last 指代要查询或修改的最后元素的后一个元素。转载 2023-02-13 17:24:35 · 402 阅读 · 0 评论 -
C/C++编程:状态机的驱动表
【代码】C/C++编程:状态机的驱动表。转载 2021-01-06 16:46:30 · 991 阅读 · 0 评论 -
C/C++面试:printf实现原理
在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数值通过压入堆栈的方式来给函数传参数的。最先压⼊的参数最后出来,在计算机的内存中,数据有 2 块,⼀块是堆,⼀块是栈(函数参数及局部变量在这⾥),⽽栈是从内存的⾼地址向低地址⽣⻓的,控制⽣⻓的就是堆栈指针了,最先压⼊的参数是在最上⾯,就是说在所有参数的最后⾯,最后压⼊的参数在最下⾯,结构上看起来是第⼀个,所以最后压⼊的参数总是能够被函数找到。因为它就在堆栈指针的上方。printf的第一个被找到的参数就是那个字符指针,就是被双引号括起来的那.转载 2021-08-10 16:42:00 · 1864 阅读 · 1 评论 -
C/C++编程: Google命令行工具gflags使用
使用flags需要包含头文件 #includegflags主要支持的参数类型包括bool,int32, int64, uint64, double, string等,定义参数通过DEFINE_type宏实现,如下所示,分别定义了一个bool和一个string类型的参数,该宏的三个参数含义分别为命令行参数名,参数默认值,以及参数的帮助信息。gflag不支持列表,用户通过灵活借助string参数实现,比如上述的languages参数,可以类型为string,但可看作是以逗号分割的参数列表。转载 2023-01-05 11:43:03 · 1194 阅读 · 0 评论 -
boost:accumulators
【代码】boost:accumulators。转载 2022-12-29 15:40:30 · 192 阅读 · 0 评论 -
C/C++编程:写入utf-8带BOM文件
UTF+BOM比UTF无BOM多了三个字节前缀:0xEF0xBB0xBF,有这三个字节前缀的文本或字符串,程序可以自动判断它为utf-8格式,并按照utf-8格式来解析文本或字符串,否则,一个文本或者字符串在未知编码的情况下,需要按照字符编码规范去一个个验证。UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的。BOM: Byte Order Mark,就是字节序标记。转载 2022-12-01 22:33:51 · 1440 阅读 · 2 评论 -
boost:progress_timer,计时器,
优点是:当退出作用域的时候,会调用析构函数,自动输出距定义progress_timer的时间,省去了手动调用timer的elapsed的工作。progress_timer的目的就是为了简化timer的调用,其他没什么。,是一个定时器, 可以像timer那样使用。转载 2022-11-26 21:53:36 · 223 阅读 · 0 评论 -
boost:timer,计时器
CLOCKS_PER_SEC 因为操作系统的不同而不同。转载 2022-11-26 21:46:21 · 350 阅读 · 0 评论 -
grpc:win10 + mingw
由于 gRPC 编译时依靠 CMake 进行代码构建,所以需要安装 CMake。双击安装包,安装过程需要勾选 “Add CMake to system PATH for all users”, 其他安装步骤将不再赘述。转载 2020-09-09 11:39:30 · 926 阅读 · 0 评论 -
boost:编译安装(win10 + mingw + cmake )
在 1.54.0 版本是在 bin 目录下;而在 1.80.0 版本直接在 Boost.Build 的安装目录下.Boost.Build 是一个基于文本的系统, 用于开发、测试和安装软件.转载 2019-07-19 17:00:24 · 1763 阅读 · 1 评论 -
grpc:hello grpc
【代码】grpc:使用学习。转载 2022-11-21 14:28:11 · 531 阅读 · 0 评论 -
boost:signals2
signals2库的核心是signal类,其类摘要如下:第一个模板参数Signature,是一个函数类型,表示可以被signal调用的函数。第二个模板参数Combiner,是一个函数对象,它被称为“合并器”,用来组合所有插槽的调用结果,默认是optional_last_value< R>,它使用optional库返回最后一个被调用的插槽的返回值第三个模板参数是Group是插槽编组的类型,默认使用int来标记组好,也可以改为std::string等,但是一般不用改。转载 2022-11-07 22:59:26 · 1655 阅读 · 1 评论 -
boost:asio与 TCP通信
asio支持TCP、UDP、ICMP等通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好的封装了Socket API。转载 2022-11-04 23:36:43 · 1903 阅读 · 0 评论 -
boost:asio与定时器
头文件理论目标类basic_waitable_timer是定时器的真正实现,steady_timer、system_timer、high_resolution_timer是basic_waitable_timer的模板特化。转载 2022-11-04 22:30:35 · 1455 阅读 · 0 评论 -
ProtoBuf:Required fields are not allowed in proto3
proto3”仅仅支持repeated字段修饰,如果使用required,optional编译会报错。在使用protobuf的编译器进行编译proto文件时提示。这是因为protobuf2与protobuf3的语法不同。但是在声明message时使用的是protobuf2的语法。使用的语法规则是prptobuf3。所以将required去掉即可。转载 2022-11-04 10:46:54 · 1279 阅读 · 0 评论 -
boost:signal_set异步处理信号
信号(signal)是UNIX系统中的一种常用的进程间异步通信机制。asio提供了类signal_set,利用异步IO的方式处理UNIX信号。转载 2022-01-02 23:06:12 · 507 阅读 · 0 评论 -
C/C++编程:错误解决总结
对’pthread_atfork’的未定义引用错误对'pthread_atfork'的未定义引用原因:没有引用pthread解决:-pthreadundefined reference to symbol ‘dlclose@@GLIBC_2.2.5’错误:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'//usr/lib64/libdl.so.2: error adding symbols: DSO missi转载 2020-11-20 16:10:21 · 8042 阅读 · 0 评论 -
C/C++编程:Google代码规范
cc.cc.h。转载 2021-03-31 10:57:18 · 1475 阅读 · 0 评论 -
C/C++面试:三个线程轮流打印ABC
编写一个程序,开启三个线程,这三个线程按照顺序依次打印ABC,每个字母打印10次后结束,最后结果如 ABCABCABC… 依次递推。转载 2020-11-17 14:37:43 · 1374 阅读 · 0 评论 -
性能:如何优化一个系统的性能(总结)
系统响应变慢了,可以从CPU、内存、磁盘、网络四个维度来分析。用户态CPU使用率%usr、低优先级CPU使用率%nice。软中断和硬中断CPU。原创 2022-09-09 11:46:13 · 1063 阅读 · 0 评论 -
C/C++面试:写代码的时候你要如何避免coredump?
coredump的类型。转载 2022-08-29 22:30:38 · 744 阅读 · 0 评论 -
C/C++编程:基于C++负载均衡远程服务器调度系统教程
lars是一个简单、易用、高性能的服务间远程调用管理、调度、负载均衡系统优势性能强夯:集群支持千万并发连接、满足用户的海量业务访问需求高可用:采用集群化部署,支持多可用区的容灾,支持无缝实时切换灵活扩展:自动分发,与弹性伸缩无缝集成,灵活扩展用户用于的对外服务能力。简单已用:快速部署,实时生效,支持多种协议、多种调度算法,用户可以高效的管理和调整服务分发策略等等。...转载 2022-08-30 10:38:55 · 738 阅读 · 0 评论 -
C/C++面试:你知道啥是自旋锁吗?
回答解释自旋锁的好处:自旋锁的缺点使用场景。转载 2022-08-29 22:00:23 · 334 阅读 · 0 评论 -
C/C++面试:条件变量使用的时候有什么需要注意的地方吗?
(1)避免惊群:也就是换取的时候请用pthread_cond_sign而不是pthread_cond_broadcast。(2)醒来之后要测试条件是否成立,如果不成立,就要继续休眠。原创 2022-08-27 15:44:41 · 323 阅读 · 0 评论 -
C/C++面试:平时写代码有用到多线程吗?
C/C++面试:平时写代码有用到多线程吗?原创 2022-08-27 15:39:13 · 524 阅读 · 0 评论 -
Linux/Unix编程:什么是线程
线程是允许应用程序并发执行多个任务的一种机制一个进程可以包含单个线程。同一程序中的所有线程均会独立执行相同程序,而且共享同一份全局内存区域,其中包含初始化数据段、未初始化数据段、堆积堆内存段。如下图所示(注意,上图简化了,线程栈的位置可能会与共享库和共享内存区域混杂在一起,这取决于创建线程、加载共享库,以及映射共享内存的具体顺序。)同一进程中的多个线程可以并发执行。在处理器下,在多处理器环境下,多个线程可以同时并行。如果一线程因为等待IO操作而阻塞,那么其他线程仍然可以继续执行对于某些应用.转载 2021-05-31 09:07:00 · 231 阅读 · 0 评论 -
C/C++编程:forward list原理分析
forward转载 2018-08-03 09:17:09 · 1070 阅读 · 0 评论 -
cmake:在 CMake 生成的 VS2015 工程中保持源码文件的目录组织
在某一工程内,多个文件散乱的分布在 Source Files/ 目录和 Header Files 目录中, 不便于查看和调试代码,如下图所示.通过使用 source_group 命令, 可以使源码保持原本的目录组织方式 (当然也可以自己重新组织).先看看组织后的目录数:先看看官方给出的命令说明: source_group() 用于定义生成 IDE 工程时的源码分组 (source groups). 有两种创建方式:为了保证版本的向后兼容性, 以下命令的作用相同:例子Note: 只有在 add_ex转载 2022-06-01 11:28:50 · 2574 阅读 · 0 评论