C++
C++相关内容
awhuter
学习;分享;进步
展开
-
C++11产生随机数,random库产生随机数
C++产生随机数,均匀分布随机数,正态分布随机数原创 2022-08-22 22:59:30 · 1143 阅读 · 0 评论 -
C++智能指针unique_ptr, shared_ptr
C++智能指针unique_ptr, shared_ptr原创 2022-07-16 16:53:16 · 398 阅读 · 0 评论 -
C++隐式类型转换,显式类型转换(强制类型转换)
隐式类型转换1、当两个不同类型变量做运算的时候,如int a=1;double b=3.0;double c = a+b; //会把int转换成double再运算2、表达式返回类型不同,或者函数返回类型不同的时候int a = 3.6+2.3;例如函数返回类型是Int, 但是你return的是double类型,则会给你隐式转换成int强制类型转换1、C风格(常用)括号里面类型,或者括号里面数据int a=6;//下面两种都行,都是C方式double b = double..原创 2022-04-24 21:14:44 · 1117 阅读 · 0 评论 -
C++的五个内存存储区,C++的new/delete,C的malloc/free
C++中把内存详细的分成了5个区域栈函数的局部变量存储区,系统自动分配和释放堆程序员动态申请的内存,new出来的内存,或者malloc出来的内存。分别要用delete和free手动释放,防止溢出全局/静态存储区全局变量和static静态变量存储区常量存储区例如常量字符串等"I am Chinese"程序代码区存放程序的区域C++申请动态内存是new/delete,比C的malloc/free好用,本质也是调用C的方法,但是多了初始化等等new/delete原创 2022-04-24 20:13:20 · 675 阅读 · 0 评论 -
C++常用输入,cin, cin.get(), getline(cin,str)
cincin>>val;cin根据后面的val的类型读取:val是int 或double,则读取数字。val原创 2022-04-24 15:49:20 · 965 阅读 · 0 评论 -
C++局部变量,全局变量,static关键字,extern关键字
局部变量在函数内部定义的变量,包括main函数,都是局部变量,局部变量一般存储在动态存储区,函数执行完毕就被清理了。在复合语句{}中定义的变量,也就是在大括号{}中定义的变量。局部变量可以和外部变量重名,此时在局部变量作用域内,一直用的是局部变量全局变量在函数外定义的变量,也就是在main函数前面定义的变量。全局变量的作用域是定义位置到该源程序(.cpp文件)结束的位置。如果想要在本源程序中,但是在全局变量定义前使用它,需要extern外部变量说明一下;如果想要在同一个项目但是不同源程..原创 2022-04-24 15:31:45 · 1775 阅读 · 0 评论 -
C++继承中的成员权限、构造函数、析构函数
继承成员权限父类成员变量和成员函数权限类型为public, protected, private继承的方式同时也有这三种public, protected, private父类权限\继承方式publicprotectedprivatepublicpublicprotectedprivateprotectedprotectedprotectedprivateprivate不可访问不可访问不可访问可以看出,父类中的private成员,虽然确实..原创 2022-04-22 16:14:16 · 444 阅读 · 0 评论 -
C++判断字符是不是大写字母,小写字母,数字,空格; isalpha(),isdigit(),tolower(),toupper()
判断是不是数字 0-9int isdigit(); //返回0或1判断是不是字母 a-z A-Zint isalpha();判断是不是字母或者数字int isalnum();变成小写int tolower()char ch=tolower('Q');变成大写char ch=toupper('q');判断是不是小写int islower('s');判断是不是大写int isupper('Q');判断是不是空格或者Tabint isblank();判断是不是原创 2022-04-17 15:01:50 · 3659 阅读 · 0 评论 -
c++, map的[]访问和.at()访问区别
map中的key不可能重复,所以有[]和.at()访问,但是multimap就没有了,因为有重复的key,所以访问结果不一定唯一,也就没有意义了,所以直接没有这个功能。map访问元素建议使用.at(),如果[]访问没有这个key的话,会自动添加一个key,value是默认值,这可能不是我们想要的效果例如 map<int,string> MAP; MAP.emplace(pair<int,string>(1,"www")); //emplace()插入效果和insert原创 2022-04-16 19:13:03 · 4573 阅读 · 0 评论 -
C++实现写一个单向链表
1、头文件head.h#ifndef HEAD_H_#define HEAD_H_#include<iostream>struct node{ node():data(-1),next(static_cast<struct node*>(NULL)){} node(int x, struct node* p = static_cast<struct node*>(NULL)):data(x),next(p){} int data; //原创 2022-04-06 20:05:51 · 1210 阅读 · 0 评论 -
c++进行按位与、或、非、异或、移位运算, 计算汉明距离
与、或、非、异或 运算都是二进制运算与“ & “都是1才得10&0 = 01&0 = 00&1 = 01&1 = 1例如 5&12 = 40 1 0 1 = 51 1 0 0 =12.------------0 1 0 0 =4或 " |"只要有一个是1,就得11 | 0 = 10 | 1 = 10 | 0 = 01 | 1 = 1例如 5|12 =130 1 0 1 =51 1 0 0 =12.-----..原创 2022-03-30 22:21:41 · 1901 阅读 · 0 评论 -
类的成员类指针,可以相互指向,也就实现了可以互相修改各自的值
System类头文件System.h#ifndef SYSTEM_H_#define SYSTEM_H_#include<iostream>#include"Segment.h"#include"Tracking.h"namespace MY{ class System { public: System(); Segment* mpSegment; Tracking* mpTracking; ..原创 2022-01-05 10:59:52 · 2059 阅读 · 0 评论 -
C++,string转int
#include<iostream>#include<string>#include<cstdlib>using namespace std;int main(){ string strnum="12345"; int num=atoi(strnum.c_str());//要把string转换成C字符串 return 0;}原创 2021-12-27 11:10:50 · 530 阅读 · 0 评论 -
C++ const修饰符,常量,函数形参,成员函数
const修饰变量//i是常量,不可变,用于替代C的宏定义const int i=10;const修饰指针的三种情况1)const在*前,此时是修饰量,指针指向的量不可变,不能用*p修改这个量;但指针自身可以变,可以指向其他地方。int a=100;const int *p = &a;//或int const *p = &a;*p = 5;//!!!!错误,不能通过这种途径改变量a = 5; //可以p = p+1;//可以,指针自身可以变2)const在..原创 2021-12-24 21:43:23 · 844 阅读 · 0 评论 -
C++11多线程,thread库; mutex类,成员函数lock(), unlock();unique_lock<mutex>模板类
文章目录进程和线程1. 进程2. 线程C++11多线程编程1. C++11新标准2. 用函数创建线程3. 用类创建线程4. 多线程数据保护进程和线程1. 进程进程就是一个在运行的可执行程序。一个CPU(核)只能同时运行一个进程,可以在多个进程间来回跳(把进程的信息和进度等信息保存在进程表中),看起来貌似在同时运行多个进程,这叫做伪并发。进程是不同的可执行程序,不同的内存空间,数据不共享。但也有进程间通信的方式,这里不讲,暂时没用到。2. 线程线程是一个任务,一个进程中可以有多个线程。每原创 2021-12-24 16:48:38 · 1600 阅读 · 0 评论 -
C++泛型编程,标准模板库(STL)
C++的标准模板库(STL)主要由三个组件构成:1、容器;2、迭代器;3、泛型算法原创 2021-12-16 14:21:35 · 1157 阅读 · 0 评论 -
判断一个字符串是否为数字,字符串转换成数字(stringstream)
#include<iostream>#include<array>#include<sstream>#include<cctype>#include<string>using namespace std;//判断是否为数字字符串,是就转换为double类型保存在num中bool isNUM(string _str, double& num);int main(){ //读取十个字符串,是数字就保存在数组中原创 2021-12-15 16:43:09 · 1672 阅读 · 0 评论 -
C++读取文件,把字符串按“空格”分成若干个字符串
文件形如:1341846313.592026 rgb/1341846313.592026.png 1341846313.592088 depth/1341846313.592088.png1341846313.654184 rgb/1341846313.654184.png 1341846313.654212 depth/1341846313.654212.png1341846313.686156 rgb/1341846313.686156.png 1341846313.686172 depth/13原创 2021-11-27 22:51:13 · 2944 阅读 · 2 评论 -
<name>Config.cmake文件默认搜索路径
建议如果实在找不到<name>Config.cmake文件,自己写个Find<name>.cmake文件放到CMAKE_MOUDLE_PATH指定的目录中,自己指定生成的头文件目录名和共享库路径名.<name>_DIR,可以定义这个变量,最优先到这个目录下查询<name>Config.cmake文件.CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, CMAKE_APPBUNDLE_PATH.根据PATH,因为PATH都是原创 2021-11-18 15:28:08 · 1278 阅读 · 0 评论 -
find_package()的搜索路径
find_package()首先明确,find_package()肯定需要个.cmake文件,不然它根本就不知道package的名字具体是啥(大写?小写?),去哪找???Module模式(1)是否有CMAKE_MODULE_PATH,有的话,优先在这里找Find<packageName>.cmake文件,根据这个文件来找; (最容易自己操作)set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_module)(2)没有CMAKE_M原创 2021-11-11 16:32:52 · 6932 阅读 · 0 评论 -
CMakeLists.txt例子, (使用eigen, opencv, pangolin, Sophus, Ceres)
一个CMakeLists.txt例子所在目录结构如下:wfq@wfq:~/MyProjects/cmaketest$ tree ..├── CMakeLists.txt├── cmake_module│ └── FindHELLO.cmake├── include│ └── head.h├── main.cpp├── src│ └── head.cpp└── SubFolder └── CMakeLists.txtCMakeLists.txt文件cmake原创 2021-11-11 13:46:47 · 3645 阅读 · 0 评论 -
CMakeLists.txt使用cmake_module, list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
一般在使用CMakelists进行编译的时候所有源文件都写在一个文件中了。但是我们使用过很多库发现他们都有一个文件夹叫cmake或者cmake_modules之类的。这类文件夹一般包含很多.cmake文件,这类文件把本来该写在CMakeLists.txt里的内容分散开来,用来找特定的库之类的。就好像我们写一个大型程序需要把很多功能分成特定的函数一样。首先我有一个CMakeLists.txt文件,里面的可执行程序需要链接到一个叫libBayesOpt.a的静态库,库的位置位于/usr/local/lib.原创 2021-11-10 21:20:00 · 12957 阅读 · 4 评论 -
CMake基础(命令、内置变量)
1、cmake特点基本语法格式:指令(参数1 参数2 …)。参数用括号括起来;。参数之间用空格和分号分开;指令是大小写无关,参数和变量是大小写敏感的set(HELLO hello.cpp) #set变量add_executable(hello main.cpp hello.cpp)ADD_EXECUTABLE(hello main.cpp ${HELLO}) #这一句和上一句一样使用${}方式取值,但是在if控制语句直接使用变量名2、cmake重要指令cmak原创 2021-11-09 20:25:29 · 1023 阅读 · 0 评论 -
g++编译C++代码的实际过程和g++常用命令选项
先写个c++代码vim test.cpp#include<iostream>using namespace std;int main(int argc,char **argv){ cout<<"This is a cppfile!"<<endl; return 0;}我们编译这个代码只需要一条命令g++ test.cpp -o test实际是经过以下四步编译的1、预处理Pro-processing i文件# -E选项指示编译器仅进行预原创 2021-11-08 21:43:46 · 3198 阅读 · 0 评论 -
C++函数的传值、传引用、传指针
C++函数传递参数的方式主要有三种:传值、传引用、传指针,三者可以在声明中看出来区别。传值当不需要修改传递的参数值时,使用传值。此类情况最多,也最安全,形如 double function(int a,int b);//传值函数声明 int x,y; double result=function(x,y);此时传入函数的只是参数的副本,无论是怎么操作,外部原参数的值不会改变。传引用引用是“别名”,因此还是参数本身,不过是参数多了个别名,参数有了两个名字。例如声明引用int a原创 2021-10-08 14:29:30 · 1972 阅读 · 0 评论 -
C++使用new分配内存,动态数组,delete释放new的内存
指针变量必须指定一个具体的地址,要么指定一个变量的地址,要么new 个新地址//错误,p没有指定具体地址 int *p;*p=10; //有效,此时*p=a=10 int a=10; int *p=&a; //用地址运算符&,获得a的地址 //有效,此时只能用指针访问地址,因为没有变量名 int *p=new int;*p=10;指针的真正用武之地在于,在运行时动态分配未命名的内存。此时,只能用指针来访问内存-----new运算符 格式:typena..原创 2021-10-07 20:16:52 · 1805 阅读 · 0 评论