std

std::future与std::promise在C++多线程同步与数据共享中的应用

1、std::promise与std::future std::promise与std::future通过配合使用完成数据的同步与共享,两者均是模板类;std::promise存储异步执行的值或异常;std::future提供可供访问的异步执行结果。二者配合使用伪码如下: std::promise< ......
线程 std promise 数据 future

【Cxx 20】使用 std::span 代替数组指针传参

我们知道std::string_view可以创建std::string的一个视图,视图本身并不拥有实例,它只是保持视图映射的状态。在不修改实例的情况下,使用std::string_view会让字符串处理的性能大幅提升。实际上,对于那些连续的序列对象我们都可以创建这样一份视图,对于std::vecto ......
数组 指针 span Cxx std

不要轻易定义指向std::vector中的元素的指针

类应该是被封装的,类的用户通过接口使用类提供的功能,而不必关心类的内部如何实现。然而,C++标准库容器 std::vector 的实现渗透到了接口中来。对于以下代码: const int pushNum = 10; std::vector<int> v = { 1,2,3 }; int* p = & ......
指针 指向 元素 vector std

弄清using namespace std的作用

⭐C++标准为了和C区别开!为了正确地使用命名空间,规定头文件不使用后缀.h。 例如当我们使用<iostream.h>时,相当于在C中调用库函数。 使用using namespace std例如 1 #include 2 #include 3 #include 4 using namespace s ......
namespace 作用 using std

C++11 多线程(std::thread)实例

C++11的std::thread在C中已经有一个叫做pthread的东西来进行多线程编程,但是并不好用 (如果你认为句柄、回调式编程很实用,那请当我没说),所以c++11标准库中出现了一个叫作std::thread的东西。 std::thread常用成员函数构造&析构函数 举个栗子 例一:thre ......
线程 实例 thread std 11

std::thread方法join与detach

1、std::join std::join是std::thread类的成员函数之一,用于等待线程的执行完成。 #include <iostream> #include <utility> #include <thread> #include <chrono> #include <atomic> vo ......
方法 detach thread join std

std::function 与 std::bind解决类成员函数作为回调函数的问题

1、std::function std::function是一个模板类,其可对C++可调用的对象进行封装,比如,成员函数、静态函数等;它的基本作用是简化调用的复杂程度,归一化调用方式。 std::function<int(int, int)> int_function:声明方式为<返回值类型(参数类 ......
函数 std function 成员 问题

C++ lambda 内 std::move 失效问题的思考

最近在学习 C++ Move 时,有看到这样一个代码需求:在 lambda 中,将一个捕获参数 move 给另外一个变量。 看似一个很简单常规的操作,然而这个 move 动作却没有生效。 具体代码如下 std::vector<int> vec = {1,2,3}; auto func = [=]() ......
lambda 问题 move std

hdc_std 传输文件脚本

项目的使用步骤中有一步是向开发板发送文件,命令比较多: 1、测试设备是否存在:hdc_std list targets 2、读写模式挂载系统分区:hdc_std target mount (但是这个命令貌似有点问题,后边说) 3、授予 hdc 后台进程 root 权限:hdc_std smode 4 ......
脚本 hdc_std 文件 hdc std

std::lock_guard自动加解锁

`std::lock_guard` 是 C++ 中用于管理 `std::mutex` 的 RAII(Resource Acquisition Is Initialization) 类之一。它的主要作用是帮助在获取 `std::mutex` 的所有权时自动对其进行加锁,并在作用域结束时自动解锁,从而避 ......
lock_guard guard lock std

train_logReg_param.o:train_logReg_param.cc:(.text+0x3407): more undefined references to `std::__throw_out_of_range_fmt(char const*, ...)' follow

001、make 编译 报错:train_logReg_param.o:train_logReg_param.cc:(.text+0x3407): more undefined references to `std::__throw_out_of_range_fmt(char const*, ... ......

C++中的高阶函数 -- std::function实现回调

C++中的高阶函数:以std::function优雅地实现回调 1. 简介 1.1 C++高阶函数的概念 在函数式编程语言中,高阶函数(Higher-order Function)是一个常见的概念,它通常被定义为满足下列条件之一的函数: 接受一个或多个函数作为输入(参数) 输出(返回值)是一个函数 ......
高阶 函数 function std

std::sort 传入成员函数指针报错的解决方案

问题引入 有一个类 A,A 的某个成员函数需要对 A 的某些变量进行 std::sort,同时要调用 A 的另一个成员函数作为比较器。如代码所示: struct A { vector<int> pos = {0, 4, 2, 5, 3}; bool cmp(int x, int y) { retur ......
指针 函数 成员 解决方案 方案

C++11语法——std::move()

std::move() 在C++中,std::move() 用于将对象转换为右值引用。 关于左值、左值引用、右值、右值引用 左值是一个表示数据的表达式(比如变量名或者解引用的指针),程序可以获取其地址 传统的C++引用,即是左值引用。 C++11新增右值引用,用 && 表示。 右值是可出现在赋值表达 ......
语法 move std 11

std::string_view

在原来的string操作中,大多数都是复制string进行操作,如:substr()、string&传参。它们都会复制占用额外内存。 使用std::string_view犹如只是对它的视图映射进行处理,有一个指针指向一个起始位置,然后会有一个size参数去决定这个指针的移动步数。 #if 1 Pri ......
string_view string view std

使用 std::setvbuf 加速输入输出

市面上的快读和快写,大致过程是手动扩大缓冲区,并手动将数字转化为字符,使用 fread / fwrite 进行最终缓冲区的输入和输出。 考虑阅读 std::setvbuf 的文档(link),发现这东西可以设置自己的缓冲区,为自己所用,同时可以设置大小。由此,我们不难写出如下的神秘代码: #incl ......
setvbuf std

C++从std::vector<int>类型数据创建二叉树

背景 在和chatGPT的日常代码交流中,这位“老师”总能给出不不少好代码,以下就是 C++从std::vector类型数据创建二叉树 的完整代码段: TreeNode* createBinaryTree(const std::vector<int>& nodes, int index) { if ......
类型 数据 vector std int

C++的std::move与std::forward原理总结

目录0、左值与右值的理解左值和右值的概念左值引用和右值引用1. std::move1.1 函数原型1.2 参数讨论1.3 通用引用1.4 返回值1.5 std::move的常用例子1.5.1 用于vector添加值1.5.2 用于unique_ptr传递1.6 再说转移对象控制权2. std::fo ......
std 原理 forward move

std::forward:完美转发的魔法师

大家好,今天我们来谈谈一个C++11引入的强大工具:std::forward。如果你曾经头疼于如何设计一个函数,让它能同时接受左值和右值,且能保留参数原始的性质,那么今天的主题绝对是你的救星。 1、std::forward是什么? 简单来说,std::forward 是一种用于实现完美转发(Perf ......
魔法师 forward 魔法 std

在C++中,互斥变量(std::mutex)是用于保护共享资源的重要工具,但它们确实有一些局限性,其中之一是无法保证包含指针的区域的多线程安全

在C++中,互斥变量(std::mutex)是用于保护共享资源的重要工具,但它们确实有一些局限性,其中之一是无法保证包含指针的区域的多线程安全。 这是因为互斥锁本质上只能保护它们所保护的代码块,而不会考虑指针指向的数据。 下面是一些与互斥锁和指针相关的常见问题和注意事项: 共享数据的复制: 互斥锁主 ......
局限性 共享资源 线程 指针 变量

C++常用语法知识-- std::istringstream

C++常用语法知识-- std::istringstream 介绍 std::istringstream是C++标准库中的一个类,它用于从字符串中提取数据,并将数据转换为不同的数据类型。通常从字符串中解析数据,例如整数、浮点数等。 使用方法 创建std::istringstream对象,首先,需要创 ......
istringstream 语法 常用 知识 std

std::optional<type>

它可以将可能存在或者不存在的内容以合适的方式返回,当返回的是空文件时,可以使用_.value_or("初始值") std::optional<std::string> data=OpenFileAsstring("data.txt"); string value=data.value_or("Not ......
optional type std lt gt

C++11 生成随机数:std::random_device、std::mt199937和std::uniform_int_distribution

1、std::random_device 用于生成随机数,定义在头文件中。 #include<iostream> #include<random> void fun() { std::random_device rd; std::cout<<"random:" << rd()<<std::endl; ......

std::istringstream的用法

1.概要 std::istringstream 是 C++ 标准库中的一个类,它用于从字符串中提取数据,并将数据转换为不同的数据类型。它通常用于从字符串中解析数据,例如整数、浮点数等。以下是关于 std::istringstream 的详细用法: 创建 std::istringstream 对象: ......
istringstream std

std::function逆向还原

std::function的内存结构 本文案例地址:https://wwmf.lanzout.com/b029diasb 密码:areg std::function为lamda函数时 本文的代码都是32位为例 vftable 首先我们可以从Func_impl_no_alloc_V_lambda得知这 ......
function std

std::function

参考资料 • cplusplus.com:http://www.cplusplus.com/reference/functional/function/ https://www.cnblogs.com/heartchord/p/5017071.html • cppreference.com:http ......
function std

疑似std::regex_search正则匹配,导致堆栈错误

一个很奇怪的问题,当我_beginthreadex/CreateThread创建线程,使用std::regex_search匹配时,程序会崩溃,堆栈如下: ntdll.dll!RtlReportCriticalFailure() 未知 ntdll.dll!RtlpHeapHandleError( ......
堆栈 正则 regex_search 错误 search

std::vector::sort

std::sort(vector.begin(),vector.end(),[](int a,int b){ if(a==1)return false;//a为1就将这个1排在最后,因为返回的是false if(b==1)return true;//还是将1排在最后 return a>b;//降序排 ......
vector sort std

使用 C++11 原子类型 `std::atomic_flag` 实现的自旋锁

使用 C++11 原子类型 std::atomic_flag 实现的自旋锁: #include <atomic> class Spinlock { public: Spinlock(): flag(ATOMIC_FLAG_INIT) {} void lock() { while (flag.test ......
原子 atomic_flag 类型 atomic flag