c/c++
文章平均质量分 60
wwwlyj123321
这个作者很懒,什么都没留下…
展开
-
c++函数模板
函数模板是C++中的一种特性,它将将参数列表中的全部或者部分参数类型剥离了出来,允许你编写一个通用的函数。函数模板的格式包括模板声明、模板参数列表和函数定义。返回类型 函数名(参数列表) {// 函数体template <typename T>:这是模板声明,T 是一个类型参数。你也可以使用 class 关键字代替 typename,效果是一样的。返回类型:函数的返回类型,可以是模板参数 T 或其他类型。函数名:函数的名称。参数列表:函数的参数列表,可以包含一个或多个模板参数 T。原创 2024-07-13 18:08:18 · 651 阅读 · 0 评论 -
C++/C:pass-by-value(值传递)与pass-by-reference(引用传递)
基本语法:Type& ref = val;运用定义完成后,相当于目标变量有两个名称,变量名ref实际上是一段连续内存空间的别名注意事项:1、&在此不是求地址运算,而是起标识作用。2、必须在声明引用变量时进行初始化。比如:int a = 10;int& b = a;3、引用初始化后不能改变,即不能在作为别的变量的引用int a = 10;int& b = a;int c = 20;b = c;\\错误!reference初始化之后不能再次赋值4、数组不能定义引用。原创 2023-09-02 16:33:06 · 861 阅读 · 0 评论 -
C++文件操作
C++ 提供了一组用于文件操作的标准库。原创 2023-09-02 12:11:17 · 716 阅读 · 0 评论 -
linux taskset命令
taskset命令用于设置进程(或线程)的处理器亲和性(Processor Affinity),可以将进程(或线程)绑定到特定的一个 或 多个CPU上去执行,而不允许将进程(或 线程)调度到其他的CPU上。原创 2022-09-17 11:06:08 · 3115 阅读 · 0 评论 -
C++命令行解析库CLI11
CLI11是一个基于C++开发的命令行解析库,语法使用范围不超过C++11标准。原创 2022-09-15 09:50:49 · 1677 阅读 · 0 评论 -
C++原子操作
原子操作 是个不可分割的操作。 在系统的所有线程中,你是不可能观察到原子操作完成了一半这种情况的; 它要么就是做了,要么就是没做,只有这两种可能。 如果从对象读取值的加载操作是 原子 的,而且对这个对象的所有修改操作也是 原子 的, 那么加载操作得到的值要么是对象的初始值,要么是某次修改操作存入的值。另一方面,非原子操作可能会被另一个线程观察到只完成一半。 如果这个操作是一个存储操作,那么其他线程看到的值,可能既不是存储前的值,也不是存储的值,而是别的什么值。 如果这个非原子操作是一个加载操作,它可能先原创 2022-09-13 14:52:53 · 257 阅读 · 0 评论 -
柔性数组的使用
ref:原创 2022-09-05 12:01:43 · 173 阅读 · 0 评论 -
C++ vector常规操作
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当不知道数组的个数的时候可以使用vector<int>a;用法:1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector还有一定要加上using namespace std;2.变量声明:...原创 2018-05-25 21:43:29 · 142 阅读 · 0 评论 -
c++ boost库
Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。.....................原创 2022-09-01 10:22:41 · 1744 阅读 · 0 评论 -
c c++源文件依赖关系分析工具
ref:原创 2022-08-31 20:03:48 · 692 阅读 · 0 评论 -
C++ 中集合以及集合的相关操作
在数学中,集合是最基本的概念之一。编程时,我们不可避免地会涉及到集合及其相关操作。在 C++ 中,标准模板库(STL)提供了std::set/两种传统意义上的集合(除此之外,还有和)。其中,std::set(和)定义在头文件set当中,从 C++98 起就有支持;而(和)则定义在头文件当中,从 C++11 开始支持。STL库中有丰富的运算方法,我们可以使用它们快速完成交集、并集、差集、对称差集的运算。集合运算的前提是两个集合必须按照同样的规则排序就绪,否则不能进行集合运算!......原创 2022-08-31 15:49:21 · 3248 阅读 · 0 评论 -
C++ 右值引用、copy&swap 、std::move 、完美转发、std::forward
ref:C++ 右值引用、copy&swap 、std::move 、完美转发、std::forward_哔哩哔哩_bilibiliC++ 右值引用、copy&swap 、std::move 、完美转发、std::forward | 越行勤转载 2022-08-21 11:05:19 · 138 阅读 · 0 评论 -
双缓冲技术
muduo日志库是用双缓冲技术。基本思路是准备两块buffer:A和B, 前端负责往buffer A填数据(日志消息), 后端负责将buffer B的数据写入文件;当buffer A写满之后, 交换A和B, 让后端将buffer A的数据写入文件, 而前端则往buffer B填入新的日志消息, 如此往复。换句话说,前端不是将一条条日志消息分别送给后端,而是将多条日志消息拼接成一个大的buffer传送给后端,相当于批处理,减少了线程唤醒的开销。对消费者(后端)而言,要做到足够大的吞吐量,并占用较少资源。原创 2022-08-21 10:09:02 · 1245 阅读 · 0 评论 -
memcpy内存重叠的解决
内存区域重叠是指内存区域 和内存区域 有重叠。只是简单的内存拷贝,没有考虑内存有重叠的情况,如果内存有重叠,其行为是不确定的。考虑内存重叠的情况,即使内存有重叠也能正常拷贝。一般来说,如果自己能确定拷贝内存没有重叠,用 比用 更高效,如果有重叠,则只能用 ref:memmove 和 memcpy的区别以及处理内存重叠问题_码城的博客-CSDN博客_memcpy内存重叠write-bug memcpy内存重叠的解决 - wangicter的博客 - 博客园memcpy内存重叠的解决 - CodeAntenna原创 2022-06-28 10:33:56 · 2084 阅读 · 1 评论 -
sscanf 函数的使用
sscanf 类型说明符:ref:sscanf 的一个坑_囚牢-峰子的博客-CSDN博客原创 2022-06-28 10:22:04 · 145 阅读 · 0 评论 -
c++/c混合编程
一、二、c++引用cextern "C"三、c引用c++ref:C++调用C出现的undefined reference 之坑------缺extern "C"_涛歌依旧的博客-CSDN博客再谈谈只针对C++编译器/链接器的extern “C“------C与C++的相互调用_涛歌依旧的博客-CSDN博客遇到问题 --- C++调用C静态库,出现undefined reference的问题 - 蜗牛的博客 | VK's BlogC++程序中出现undefined refere原创 2022-04-05 11:31:30 · 2209 阅读 · 0 评论 -
二维字符数组
1、在被调用函数的形参数组定义可以省略第一维的大小,第二维不可省略,如下:void fun(int a[5][20]); //合法void fun(int a[][20]); //合法void fun(int a[5][]); //不合法void fun(int a[][]); //不合法将二维数组作为形参时,第一维大小可以省略,第二维不可省略,这是有编译器原理限制的,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明...原创 2022-04-02 21:14:40 · 1407 阅读 · 0 评论 -
互斥锁(Mutex) 与 读写锁(RWMutex)
并发场景中, 互斥锁 与 读写锁 是常用解决访问冲突的两种锁:互斥锁(Mutex)同时只能有一个线程能够获得锁(Lock);读写锁(RWMutex)同时只能有一个线程能够获得写锁定(Lock); 同时能有多个线程获得读锁定(RLock); 写锁定(Lock) 与 读锁定(RLock) 互斥;从两种锁的特性看, 读写锁能够完全替代互斥锁. 但通常提到读写锁时都会说: 读写锁用于 读多写少 的场景.2、Linux的4种锁机制:互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访原创 2022-03-09 15:28:59 · 1424 阅读 · 0 评论 -
c++11:Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象(匿名函数就是没有函数名),以简化编程工作。Lambda表达式完整的声明格式如下:[capture list] (params list) mutable exception-> return type { function body }Lambda表达式完整的调用格式如下:[capture list] (params list) mutable exception-> return type { functio原创 2021-12-26 18:15:51 · 538 阅读 · 0 评论 -
C++ static_cast、dynamic_cast、const_cast和reinterpret_cast
一、背景由来隐式类型转换是安全的,显式类型转换是有风险的。C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换统一使用(),而()在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、Mac 下的 Command+F)定位关键代码。为了使潜在风险更加细化,使问题追溯更加方便,使书写格式更加规范,C++原创 2021-12-04 22:09:13 · 1226 阅读 · 0 评论 -
c++ vector数据类型
一、简介vector是定义在C++标准模板库。vector可以理解为是一个能够存放任意类型的动态数组,能够增加和删除元素,但是一个容器中的对象必须是同一种类型。和数组的相似点:1、vector为它们的元素使用连续的存储位置,也就意味着可以通过指针的偏移量来进行访问某一个元素。2、与其他动态序列容器(队列、链表)相比,向量访问其元素(就像数组一样)非常高效,并且从末尾添加或删除元素的效率相对较高。但对于涉及在末尾以外的位置插入或删除元素的操作,vector的性能相对较差不同点:1、原创 2021-12-04 21:13:00 · 3121 阅读 · 0 评论 -
c/c++ ---- 常见的字符串操作函数
一、memcpy1、函数原型#include <string.h>vvoid * memcpy ( void * destination, const void * source, size_t num );2、函数介绍从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝num个字节到目标destination中,并将目标地址返回。二、strlen1、函数原型#include <string.h>size...原创 2021-12-04 20:20:46 · 599 阅读 · 0 评论 -
C++ 构造函数的理解
一、构造函数的定义:类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。特殊在哪些地方呢?1、构造函数的名称与类的名称是完全相同的。2、并且不会返回任何类型,也不会返回 void。一个典型的构造函数如下:#include <iostream> using namespace std; class Line{ public: void setLength( double len ); double getLengt原创 2021-01-08 20:38:55 · 844 阅读 · 0 评论 -
C++11新特性之----for循环的新用法
前言C++11这次的更新带来了令很多C++程序员期待已久的for range循环,每次看到javascript, lua里的for range,心想要是C++能有多好,心里别提多酸了。这次C++11不负众望,再也不用羡慕别家人的for range了。先看一下官方的实例:double prices [ 5 ] = { 4.99 , 10.99 , 6.87 , 7.99 , 8.49 } ;for ( double x : prices ) std :: cout <<.转载 2021-01-08 16:20:29 · 1101 阅读 · 0 评论