- 博客(34)
- 收藏
- 关注
原创 c++ 宏中#和##
C/C++ 的宏中:#:功能是将其后面的宏参数进行字符串化操作,简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。##:连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。凡是宏定义里有用#或##的地方宏参数是不会再展开,例如_STRI(INT_MAX)中的INT_MAX就不会被展开为2147483647。如果想要使其中的宏参数展开,则需要多加一层中间转换宏: #define STRI(s) _STRI(
2022-05-15 23:32:21
3823
1
原创 thread
目录线程安全创建线程std::thread 创建线程 (线程不安全)互斥量(mutex) 原子变量(atomic)std::threadthread_local线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取 完,其他线程才可使用。不会出现数据不一致或者数据污染。”创建线程std::thread 创建线程 (线程不安全)#include <iostream>#includ
2022-05-15 21:00:43
217
原创 #define #undef noexcept
#define #undef#define:宏定义,程序在预处理阶段将用define定义的内容进行替换。#undef 取消一个宏的定义,限制宏定义的有效范围;#include <iostream>using namespace std;int main() { #define MODI 10 cout << "MODI = "<< MODI << endl; #undef MODI c
2022-05-15 17:42:14
235
原创 左值引用、右值引用&vector
目录左值引用右值引用构造函数的左引用和右引用左值引用demoint a = 10;int &b = a; // 定义一个左值引用变量b = 20; // 通过左值引用修改引用内存的值左值引用在汇编层面其实和普通的指针是一样的;定义引用变量必须初始化,因为引用其实就是一个别名,需要告诉编译器定义的是谁的引用。int &var = 10;上述代码是无法编译通过的,因为10无法进行取地址操作,无法对一个立即数取地址,因为立即数并没有在内.
2022-05-13 23:38:57
494
原创 解压tar.xz
tar -xf xxxx.tar.xz如:tar -xf cudnn-linux-x86_64-8.3.1.22_cuda11.5-archive.tar.xz
2022-03-17 13:57:57
348
原创 学习笔记:局部类
局部类:在函数内部创建的类1、 作用域仅限于函数内部2、其所有的成员必须定义在类内部,不允许定义static成员变量3、 成员函数不能直接访问函数的局部变量(static变量除外)int g_age =10;void test(){ static int age =10; // 局部类 class Car{ public: void run(){ age = 20; } .
2022-02-21 00:46:55
100
原创 学习笔记:内部类(嵌套类)
如果将类A定义在类C的内部,那么类A就是一个内部类(嵌套类)内部类的特点1. 支持 Public, protected, private权限2. 成员函数可以直接访问外部类对象的所有成员(反过来则不行)3. 成员函数可以直接不带类名,对象名访问其外部类的static成员4. 不会影响外部类的内存布局。(仅仅是限制了访问权限)5. 可以在外部类内部声明,在外部类外面进行定义1. 支持 Public, protected, private权限#include <iostre
2022-02-21 00:44:26
451
原创 学习笔记:编译器自动生成的构造函数
c++的编译器在某些特定的情况下,会给类自动生成无参的构造函数,比如1. 成员变量再声明的同时进行了初始化2. 有定义虚函数3. 虚继承了其他类4. 包含对象类型的成员,且这个成员有构造函数(编译器生成或自定义)5. 父类有构造函数总结: 对象创建后,需要做一些额外操作时(比如内存操作,函数调用),编译器一般都会为其生成构造函数。demo:不会自动生成构造函数1. 无成员变量时,无需进行变量的初始化,在编译时没有必要生成构造函数。class Person {};
2022-02-20 23:59:46
730
原创 git rebase
git rebase 还是 merge的使用场景最通俗的解释 - 简书场景:基于master分支创建一个sub_branch,在开发过程中,master分支随时有进行更新,因此在sub_branch分支编写代码之前进行一次git rebase master,就好像你从公共分支又重新拉出来这个分支一样。>> git rebase master随后进行开发后>> git add .>> git commit -m "xx">> git pu
2022-02-11 15:29:53
300
原创 引用和指针
C++中的引用:引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。引用的特点:①一个变量可取多个别名。②引用必须初始化。③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。#include <iostream>int ma...
2022-02-08 22:04:05
543
原创 git 升级至v2.2.1
安装需求需要安装的库,若没有出现的报错将会在异常解决 里说明yuminstallperl-ExtUtils-CBuilderperl-ExtUtils-MakeMakerautoconf查看git版本git --vsersion卸载Centos自带的git1.7.1: yum remove git下载git2.2.1并将git添加到环境变量中wget https://github.com/git/git/archive/v2.2.1.tar.gztar ...
2021-12-30 18:22:14
278
原创 学习笔记:堆空间
在程序运行过程,为了能自由控制内存的声明周期、大小,会经常使用堆空间的内存堆空间的申请\释放malloc \free new \ delete new[] \delete[]int *p = (int *) malloc(4);* p = 10;下图是上面两行在X86环境的内存空间分布demo:#include <iostream>#include <cstring>using namespace std;void test(){ ...
2021-12-09 00:32:29
390
原创 堆栈,指针
转载:野指针及c++指针使用注意点 - 小菜鸡y - 博客园野指针1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。char *p; //此时p为野指针2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针.char *p=new char[10]; //指向堆中分配的内存首地址,p存储在栈区cin&.
2021-12-08 23:27:02
556
原创 学习笔记:友元
如果将函数A(非成员函数)声明为类C的友元函数,name在函数A内部就能直接访问类C对象的所有成员如果将类A声明为类C的友元类,那么在类A的所有成员函数内部都能直接访问类C对象的所有成员无友元demo:// 通过调用成员函数getx(),gety(),获取成员变量,增加开辟,关闭栈空间开销#include <iostream>#include <cstring>using namespace std;class Point { int m_x; .
2021-11-29 00:10:29
483
原创 学习笔记:隐式构造
隐式构造函数//C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数// 隐式构造函数// C++ 中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数#include <iostream>#include <cstring>using namespace std;class Person{private: int m_age;public: Person(/* args */) { ...
2021-11-28 23:25:29
677
原创 学习笔记:拷贝构造函数(浅拷贝,深拷贝)
#include <iostream>#include <cstring>using namespace std;class Car{ int m_price; char * m_name; void copy(const char * name =NULL){ if(name == NULL) return; // 申请新的堆空间 m_name = new char[strlen(name) + ...
2021-11-28 21:41:30
399
原创 笔记:继承
#include <iostream>using namespace std;struct Student{ int m_score; Student(int score) :m_score(score){cout << "Student::Student() - m_score = " << m_score << endl;} void study(){ cout << "Student::s...
2021-10-26 00:07:16
82
原创 虚析构函数
#include <iostream>using namespace std;struct Animal{ int m_age; void speak(){ cout << "Animal::speak()" << endl; } void run(){ cout << "Animal::run()" << endl; } Animal() { ...
2021-10-26 00:05:42
67
原创 父类指针、子类指针,多态,虚表
目录父类指针指向子类对象子类指针指向父类对象多态c++默认根据指针类型调用对应的函数非多态democ++中的多态通过虚函数实现(virtual修饰)虚函数实现demo虚函数实现原理汇编分析内存分析父类指针指向子类对象父类指针指向子类对象,是安全的的(继承方式必须是public)子类指针指向父类对象子类指针指向父类对象是不安全的struct Person{ int m_age;};struct Student...
2021-10-19 00:38:52
1234
原创 shell 之grep,awk,for in
删除strA中包含strB中存在的key和value,最后合并strB和strA.strA="long=1 string=2e test=http://cnfiefish.com"strB="string=3b"for var in ${strA[@]}do key=(`echo "${var}" | awk -F '=' '{print $1}'`) echo "key: $key" if [[ $strB =~ $key ]]; then strA=${strA[@.
2021-10-17 23:09:55
303
原创 shell查找,匹配,替换,正则匹配 (grep,awk,for)
匹配字符串后,替换strB的字符串的key匹配strA,并替换value如,strB中string=3b,匹配strA是否有string字符串,如果有,删除strA中对应的key和value,最后合并strA和strB字符串。strA="long=1 string=2e test=http://cnfiefish.com"strB="string=3b"for var in ${strA[@]}do key=(`echo "${var}" | awk -F '=' '{print
2021-10-17 22:54:46
1453
原创 对象和内存
类的定义#include <iostream>using namespace std;class Persion{public: int m_age; //void run(Persion *persion){ // //显示调用 // cout << persion->m_age << " run()" <<endl; //} void run(){ //th
2021-10-10 13:42:01
124
原创 内联函数.
//内联函数//函数调用将展开为函数体代码编译器也会自动进行一定程度的优化,将部分可优化的函数调用直接展开。/*什么时候使用内联函数1、函数代码体积不大2、频繁调用(避免频繁开辟、回收栈空间)*/#include <iostream>using namespace std;inline void func(){ cout << "func1()" <<endl; cout << "func2()" <&
2021-10-10 11:13:23
70
原创 fatal:‘origin‘ does not appear to be a git repository fatal:Could not read from remote repository
今天gitlab中遇到的问题:当 git push origin branch_name时遇到报错如下:fatal:'origin' does not appear to be a git repository fatal:Could not read from remote repository原因:本地分支和远程分支断开连接解决方法:cd 本地分支里1、git b...
2018-08-23 22:35:28
53649
2
原创 ubuntu18.04+nvidia387+cuda9.0安装
1、ubuntu18.04+nvidia387安装过程2、安装cuda9.01)安装依赖关系sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev2)gcc降低版本查看g...
2018-05-19 14:14:36
4272
1
原创 飞行堡垒fx63vm+ubuntu18.04安装nvidia387驱动
折腾了几天终于安装好nvidia,实在是问题百出,现在记录下。来直接奔入主题电脑型号:华硕的飞行堡垒fx63vm系统:ubuntu18.04显卡:gtx1060过程:1、设置secure boot control为disabled(非常重要)。步骤:1)、开机按F2进入BIOS2)按F7进入Advance Mode,进入security选中Secure Boot,设置为disabled。按F10保...
2018-05-18 18:55:48
2833
原创 Qt 5.6+MySQL5.7.18
1、下载mysql-5.7.18-win32.zip 地址: https://dev.mysql.com/downloads/mysql/qt-opensource-windows-x86-mingw492-5.6.2.exe (可配置于win10 64位)2、安装2.1、安装mysql将mysql解压到C:\MySQL,注意目录
2017-12-17 15:30:22
607
原创 opencv去除高斯噪声(H1范数)
Python +opencv# _*_ coding:UTF-8 _*_import numpy as npimport cv2def Normalize(value): if value > 255: value = 255 elif value 0: value = 0
2017-12-17 15:25:03
4383
原创 关于AttributeError:‘numpy.ndarray‘ object has no attribute ‘index‘
使用了一段时间的python,发现一个被忽略的ndarray和list的不同之处。先上例子:代码:import numpy as nparray = [[0,0],[0,1],[0,2],[2,2],[3,3],[4,4]]Indexs = [1,2,3]print("first array:",array)array = np.
2017-12-17 15:16:42
264435
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人