c/c++
文章平均质量分 52
ystraw_ah
人生最有价值的时刻,不是最后的功成名就,而是对未来正充满期待与不安。
展开
-
【c++】gdb调试
gdb 调试原创 2024-09-29 09:58:57 · 374 阅读 · 0 评论 -
c++ 原子变量-Memory fence
我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指令写出正确的代码是一件非常困难的事,琢磨不透的race condition、很烧脑,这篇文章试图通过介绍架构下的原子指令帮助大家入门。C++11正式引入了,我们就以其语法描述。顾名思义,原子指令是不可再分的指令,比如x.fetch_add(n)指原子地给x加上n,这个指令要么没做,要么完成,不会观察到中间状态。原创 2023-10-17 20:57:38 · 301 阅读 · 0 评论 -
Makefile
【代码】Makefile。转载 2023-09-22 20:55:06 · 147 阅读 · 0 评论 -
TBB concurrent_queue
【代码】TBB concurrent_queue。原创 2023-05-30 21:40:36 · 432 阅读 · 0 评论 -
string_view
【代码】string_view。原创 2023-05-28 22:58:00 · 100 阅读 · 0 评论 -
[c++] cilk的使用
文章目录相关技术:Cilk学习资料:相关笔记粒度设置相关技术:OpenMPCilk学习资料:Cilk Tutorial相关笔记粒度设置例如如下:#include <iostream>#include <cilk/cilk.h>#include <cilk/reducer_opadd.h>#include <cilk/reducer_min.h>#include <cilk/reducer_max.h>#include &l原创 2023-06-01 19:21:25 · 667 阅读 · 0 评论 -
【c++】vector中删除元素
1.删除指定范围的元素vector删除元素之pop_back(),erase(),remove()向量容器vector的成员函数op_back()可以删除最后一个元素.而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。还可以采用通用算法remove()来删除vector容器中的元素.不同的是:采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。C++ STL vecto原创 2021-03-19 20:56:59 · 35303 阅读 · 3 评论 -
【c++】c++ std中set与unordered_set区别
set与unordered_set各有有缺点,不要任性使用!!!c++ std中set与unordered_set区别set 基于红黑树实现,红黑树具有自动排序的功能,因此 map 内部所有的数据,在任何时候,都是有序的。unordered_set 基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存,无自动排序功能。底层实现上,使用一个下标范围比较大的数组来存储元素,形成很多的桶,利用 hash 函数对 key 进行映射到不同区域进行保存。版权声明:本文为博主原创转载 2021-07-15 16:49:53 · 259 阅读 · 0 评论 -
【c++】加锁
C/C++编程:锁的应用C++11中std::unique_lock的使用给一个互斥的例子:加锁前:#include <iostream>#include <vector>#include <unordered_set>#include "atomic_ops.h"#include <thread>#include <mutex>using namespace std;std::mutex supernode_ids_mux_原创 2021-07-10 15:05:37 · 2986 阅读 · 0 评论 -
【c++】vector resize()与初始化
如果使用vector的resize()之前其大小(size()==0)为0,则resize()会给每个初始化;如果之前大小不为0,则之前部分的值不变,后面扩充的空间的值会初始化。所以,如果第二种情况下希望也能全部初始化,则可以先clear(),然后在resize()。#include <iostream>#include <vector>using namespace std;int main(){ vector<int> a; for(int原创 2021-07-02 21:07:25 · 4206 阅读 · 2 评论 -
【c++】二进制文件读与写
C++二进制文件读写(read和write)详解C++二进制文件读写, -> https://www.doc88.com/p-9983627743652.html?r=1C++ fstream详解当有些文件不需要人能看懂时,用二进制进行写入和存储可以避免计算机做不必要的类型转化。下面给一定写入二进制和读入二进制的例子:即写入时给定需要写入的变量地址和类型大小;读入时给定存储数据变量的地址和类型大小;//This program uses the write and read funct原创 2021-06-30 13:33:20 · 696 阅读 · 0 评论 -
【c++】多线程下利用Gcc内置原子操作保证多线程相加安全
Gcc内置原子操作__sync_系列函数简述及例程type __sync_fetch_and_add (type ptr, type value, …)// 将value加到ptr上,结果更新到ptr,并返回操作之前ptr的值bool __sync_bool_compare_and_swap (type ptr, type oldval type newval, …)// 比较ptr与oldval的值,如果两者相等,则将newval更新到*ptr并返回true下面给一个示例,例子中的目标是保证原创 2021-06-20 09:48:23 · 441 阅读 · 0 评论 -
【c++】bitset实现set
相关资料:C++实现BitMap数据结构c++ bitset类用法libgrape-lite/grape/utils/bitset.h libgrape-lite/grape/utils/vertex_set.h 个人理解:因为bitset就是利用每个位来表示一个数是否存在(0/1),所以本质上bitset就类似于vector<bool>,只是bitset在存储和效率方面可能有优势。然后bitset用来做set的思想还是和数组一样,只是每个数的每一bit表示一个数,例如3个64位的整原创 2021-04-16 21:16:18 · 662 阅读 · 0 评论 -
【c++】模板类继承模板类
C++继承访问权限:https://www.runoob.com/cplusplus/cpp-inheritance.html1. 普通类继承demo #include <iostream>using namespace std;// 基类class Shape{public: void setWidth(int w) { width = w; } void setHeight(int h) { hei原创 2021-04-14 14:50:42 · 4688 阅读 · 0 评论 -
【c++】 gflags和glog安装及使用
安装install gflags just run:sudo ./install_gflags.shinstall_gflags.sh内容如下:#!/bin/bash -xcd gflagsif [ $? -ne 0 ]then echo "gflags directory not found" git clone https://github.com/gflags/gflags.git if [ $? -ne 0 ] then echo原创 2021-04-13 21:48:40 · 1688 阅读 · 2 评论 -
【c++】C++头文件为什么要一个该 头文件的宏定义?
C++头文件为什么要一个该 头文件的宏定义?// tabtenn0.h -- a table-tennis base class#ifndef TABTENN0_H_ #define TABTENN0_H_ //为什么会加这个?有什么用途吗,在后续的代码中没有这个宏的出现#include <string转载 2021-04-12 12:50:29 · 877 阅读 · 0 评论 -
【c++】 vector 查找/二分查找/查找Pair
在vector中查找元素方法很多,比较简单的是利用标准库中提供的方法来查找。1. find()std::vector<int>::iterator iter=find(_adjlists.begin(), _adjlists.end(), v);if(iter == _adjlists.end()){ // 没查到}else{ // 找到了}2. 二分查找(lower_bound)C++标准库里的二分查找算法剖析对于需要多次查询,为了提高查询效率,可以考虑先排序,然后使原创 2021-04-01 16:09:24 · 12198 阅读 · 0 评论 -
c++ 习题集
下面记录遇到的c++习题:1.new阅读程序写结果:#include <stdio.h>#include <iostream>using namespace std;class A{ int a, b; public: A(int t1, int t2){ a = t1; b = t2; } virtual void fun(){ cout << a + b << endl; } };class B:p原创 2020-12-16 08:56:36 · 273 阅读 · 0 评论 -
子类析构时是否要调用父类的析构函数
转载自:子类析构时是否要调用父类的析构函数descprition构造时,先构造父类,再构造子类部分,因此父类和子类的构造函数都会被调用;析构时,要分情况:(1)(父类析构函数不是虚函数)使用父类指针指向子类对象,析构该子类对象时,只会调用父类析构函数,因为不具多态性;(注意,这里的也就是说总共只调用一次析构,即父类析构,因为每个类的析构只调用一次),代码理解:class child:public parent{};parent *p = new child();delete p; //转载 2020-12-16 00:19:05 · 3564 阅读 · 1 评论 -
MPI入门学习-MPI_Gather and MPI_Allgather
如果我们需要在不同进程间完成数据的聚集操作,有如下两种可以选择,然后我理解的区别是:MPI_Allgatherv传递的数组个数可以不一样,可以自己设置每个进程中的数量(即偏移量);MPI_Allgather传递的数组长度都一样。具体使用可以分别参照下面的两篇博客:MPI学习-MPI_Gather and MPI_AllgatherMPI_Allgatherv函数讲解下面放一个MPI_Allgather的例子:/*** 全收集函数示例, 每个进程都拥有收集结果,* 相当于以每个进程作为根进程对转载 2020-11-17 22:16:06 · 3960 阅读 · 0 评论 -
【C++】c++中的map与hashmap
c++里面也有map和hashmap,分别适用于不同场景。详细介绍可以参考:C++ STL中哈希表 hash_map从头到尾详细介绍示例代码:#include<unordered_map> //由于编译器报错,把hash_map换为了unordered_map#include<iostream>using namespace std;int main(void){ unordered_map<unsigned int, unsigned int>hm;原创 2020-11-17 20:01:14 · 984 阅读 · 0 评论 -
C++ vector查找元素
1.vector中为基本类型的变量2.存放的为类变量find()原创 2020-11-04 21:45:02 · 28614 阅读 · 0 评论 -
c++11 shared_ptr智能指针
原文链接: https://www.cnblogs.com/wangkeqin/p/9351191.html文章目录引子初始化 sahred_ptr关于get()函数;关于mak_shared函数:shared_ptr的拷贝和赋值shared_ptr作返回值:引用计数:其他shared_ptr操作容器中的shared_ptr-记得用erease节省内存状态共享——why use shared_ptr?智能指针与异常shared_ptr对象的销毁1)管理动态数组2)管理非常规动态对象总结:两外的注意点参考转载 2020-08-28 12:17:28 · 440 阅读 · 0 评论 -
c++拷贝构造函数(深拷贝,浅拷贝)详解
转载自:c++拷贝构造函数(深拷贝,浅拷贝)详解一、什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=100;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include<iostream>using namespace std;class CExample{private: int a;public: //构造函数 CExample(int b转载 2020-08-22 10:40:50 · 632 阅读 · 0 评论 -
【c++】OpenMP自动并行
文档教程OpenMP 推荐!!!下面的几篇博客为此教程的翻译整理版本。官网:OpenMP应用程序编程接口入门博客:最简单的并行计算——OpenMP的使用OpenMP入门教程(一)OpenMP入门教程(二)OpenMP入门教程(三)通过 GCC 学习 OpenMP 框架OpenMP编程入门之一...原创 2020-08-02 10:50:17 · 231 阅读 · 1 评论 -
cilk_for与Reducer
1.cilk之User Guide学习笔记(4)cilk_for的分析2.利用Cilk™ Plus的Reducer解决并行程序中的竞态及按序计算问题cilk_for 循环用于取代常规的C/C++ for循环,它允许循环迭代并行执行, cilk_for结构有串行或并行这两种,具体介绍见第一篇文章,其中需要思考的一个问题是,为什么需要会有这两种并行操作,直接用二分的并行不就行了,串行的作用在于什么?通过阅读第二篇文章就可以发现答案,串行可以将所有操作并行执行,但是结果以串行返回,这样既可以做到同时计算也可以转载 2020-08-01 16:22:07 · 410 阅读 · 0 评论 -
C/C++内存分区
C/C++内存分区如果申请的空间特别大的话,建议在堆区动态申请。1.堆区:由编程人员手动申请,手动释放,若不手动释放,程序结束后由系统回收,生命周期是整个程序运行期间。使用malloc或者new进行堆的申请,堆的总大小为机器的虚拟内存的大小。说明:new操作符本质上是使用了malloc进行内存的申请,new和malloc的区别如下: (1)malloc是C语言中的函数,而new是C++中的操作符。 (2)malloc申请之后返回的类型是void*,而new返回的指针带有类型。 (3)malloc只负转载 2020-08-01 16:07:59 · 199 阅读 · 0 评论