
C++
文章平均质量分 74
小桥流水人家_
这个作者很懒,什么都没留下…
展开
-
C++11 for区间遍历:vector几种遍历方式
近来,基本上所有现代编程语言都有一种对一个区间写for循环的便捷方式。最终,C++也有了相同的概念;你可以给循环提供一个容器,它帮你迭代。example:#include <iostream>#include <vector>#include <map>using namespace std;int main() { vector<int> num{3, 7, 1, 7, 9}; // 修改你正在迭代的容器的值,或者你想避原创 2020-09-22 20:32:16 · 14301 阅读 · 1 评论 -
C++中operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C+ +扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供...原创 2018-12-05 09:05:06 · 2372 阅读 · 0 评论 -
字节、字、位、比特的概念和关系
1、位(bit)来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态(21);两个二进制位可以表示00、01、10、11四种(22)状态;三位二进制数可表示八种状态(23)……。2、字节(byte)字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。字节是计算机中数据处理的基本单...原创 2018-11-28 09:45:20 · 134534 阅读 · 10 评论 -
C++中CopyFile、MoveFile的用法
1.含义CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)MoveFile(A, B);表示将文件A移动到B2.函数原型CopyFile:#if defined(_M_CEE)#undef CopyFile__inlineBOOLCopyFile( LPCTSTR lpExistingFileName,...转载 2018-11-27 21:43:10 · 2020 阅读 · 0 评论 -
关于set和map迭代器支持的运算
问题:曾经想遍历一个set遍历。当时是这样写的:set<int>::iterator b = a.begin()+1后来发现程序报错。究其原因是,set迭代器不支持加减数操作。查看了一下维基百科,下面是有关说明1.所有迭代器都应该实现自增算符:iter++,++iter2.Bidirectional迭代器:是在前向迭代器的基础上,多了单步向后遍历的能力。也就是–iter,...转载 2018-11-27 21:28:31 · 1039 阅读 · 0 评论 -
uint8_t / uint16_t / uint32_t /uint64_t数据类型详解
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时...转载 2018-11-27 21:17:01 · 818 阅读 · 0 评论 -
#ifndef/#define/#endif使用详解
问题:想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?其实“被重复引用”是指一个头文件在同一个cpp文件中被incl...转载 2018-11-27 20:47:03 · 5996 阅读 · 0 评论 -
C++ 空字符('\0')和空格符(' ')
1.从字符串的长度:——>空字符的长度为0,空格符的长度为1。2.虽然输出到屏幕是一样的,但是本质的ascii code 是不一样的,他们还是有区别的。#include<iostream>using namespace std;int main(){ char a[] = " "; char b[] = "\0"; cout << str...原创 2018-11-27 19:52:44 · 13164 阅读 · 0 评论 -
C语言中exit()与return的区别
1、exit函数和return函数的主要区别是:1)exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。exit是结束一个进程,它将删除进程使用...转载 2018-11-27 18:52:57 · 263 阅读 · 0 评论 -
pragma comment的使用
#pragma 的使用我们经常用到的是#pragma comment(lib,"*.lib")这类的。#pragma comment(lib,“Ws2_32.lib”)表示链接Ws2_32.lib这个库。和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在使用你的代码的时候就不用再设置工程settings了尽管 C 和 C++ 都已经有标准,但是几乎每...转载 2018-11-27 17:45:32 · 22537 阅读 · 1 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即...转载 2018-11-27 16:30:17 · 134 阅读 · 0 评论 -
c++如何生成随机数
使用rand()函数头文件&lt;stdlib.h&gt;(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。例如:#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;void ma...转载 2018-11-27 16:04:44 · 9363 阅读 · 1 评论 -
C++通过jsoncpp类库读写JSON文件-json用法详解
介绍:JSON 是常用的数据的一种格式,各个语言或多或少都会用的JSON格式。JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择。JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的。编译方法:使用Jsoncpp生成的lib文件:首先下载Jsonc...原创 2018-12-02 16:58:11 · 1355 阅读 · 0 评论 -
memset()函数及其作用
memset()函数原型是:extern void *memset(void *buffer, int c, int count) //buffer:为指针或是数组, //c:是赋给buffer的值, //count:是buffer的长度.这个函数在socket中多用于清空数组.如:原型是:memset(buffer, 0, sizeof(buffer))...原创 2018-12-01 16:16:04 · 1786 阅读 · 0 评论 -
struct和typedef struct用法和区别
1 首先://注意在C和C++里不同1.1 在C中定义一个结构体类型要用typedef:typedef struct { int a }stu;于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)这里的Stu实际上就是struct Student的别名。Stu==struct Student另外这里...转载 2018-11-28 19:11:28 · 179 阅读 · 0 评论 -
jsoncpp 构造空数组
创建json格式的数据时,为了保证数据为空,字段也要存在的情况,需要构造空数组。类似下面这种形式:{"FurnitureItemObject":[],"FurniturePlaceItemObject":[],"RoomNum":0}解决方案:可以用 resize 解决这个问题:Json::Value root;root["FurniturePlaceItemObject"].resi...原创 2019-07-11 19:37:44 · 2404 阅读 · 0 评论 -
C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作
C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了“文件流”(即非标准的输入输出)的思想c读写文件fopenC 库函数FILE *fopen(const char *filename, const char *mode)使用给定的模式 mode 打开 filename 所指向的文件。包含头文件:#include<stdio.h>fopen() 函数的声明...原创 2019-07-13 20:25:41 · 4860 阅读 · 0 评论 -
C、C++中的static和extern关键字
1.首先,关于声明和定义的区别这种写法(函数原型后加;号表示结束的写法)只能叫函数声明而不能叫函数定义,只有带函数体的声明才叫定义,比如下面只有分配存储空间的变量声明才叫变量定义,其实函数也是一样,编译器只有见到函数定义才会生成指令,而指令在程序运行时当然也要占存储空间。那么没有函数体的函数声明有什么用呢?它为编译器提供了有用的信息,编译器在翻译代码的过程中,只有见到函数原型(不管带不带函数...转载 2019-04-03 19:45:08 · 416 阅读 · 0 评论 -
VS的工作目录和输出目录
C+ +项目,解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,...转载 2019-04-09 13:46:24 · 4261 阅读 · 0 评论 -
error LNK1169 找到一个或多个多重定义的符号的解决方法
问题描述如下:有 三个源文件,A.h、B.cpp、C.cpp。A.h是头文件,其中声明了三个变量a1、a2、 a3。B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。在编译时,编译能够通过,但链接时出了问题,出现”error LNK1169: 找到一个或多个多重定义的符号“的错误。经过分析,确定了这是由于两个实现文件...转载 2019-04-03 14:56:49 · 3380 阅读 · 1 评论 -
C++ 获取Unix时间戳
什么是Unix时间戳?Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用2038年1月19日会发生什么?在2038年1月1...原创 2019-04-11 20:44:33 · 14241 阅读 · 0 评论 -
VC++调试错误的解决方案
这篇文章主要用来记录使用Visual Studio过程中,出现的各种error,并提供自己当时解决的方案。但是,一个error可能由不用原因引起的,文中案例仅供大家参考。 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 解决:将工程设置为Using MFC in sta...转载 2019-04-07 20:14:48 · 1330 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
为了避免同一个文件被include多次可以用以下两种方法:1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:#ifndef __SOMEFILE_H__#define __SOMEFILE_H__... ... // 一些声明语句#endif方式二:#pragma on...转载 2019-04-07 19:49:24 · 891 阅读 · 0 评论 -
strcmp()字符串比较函数用法
函数原型:int strcmp(const char *s1, const char *s2);头文件:#include <string.h>功能: 用来比较两个字符串参数: s1、s2为两个进行比较的字符串返回值: 若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。说明: strcmp()函数是根据ACSII码的值来比较两个...转载 2019-04-04 13:26:16 · 14370 阅读 · 0 评论 -
如何终止线程的运行(C/C++)
想要终止线程的运行,可以使用以下方法:1、线程函数返回(最好使用该方法)。2、通过调用ExitThread函数,线程将自行撤消(最好不使用该方法)。3、同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法)。4、ExitProcess和TerminateProcess函数也可以用来终止线程的运行(应避免使用该方法)。下面将详细介绍终止线程运行的方法:1-...转载 2018-12-20 09:44:08 · 13327 阅读 · 0 评论 -
关于C++中的friend友元函数的总结
1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的...转载 2018-12-07 10:05:18 · 19626 阅读 · 4 评论 -
浅谈结构体如何分配内存
下面直接以例子进行说明:(1)先是定义了如下结构体:struct{ char a; int i; double d; }text;然后用sizeof(text),预期结果是1+2+8 = 11???如果这样想就错了,答案是16.(2)然后,换一下变量的顺序:struct{ char a; double d; int i; ...转载 2018-11-29 22:10:17 · 1436 阅读 · 0 评论 -
C++中头文件(.h)和源文件(.cpp)都应该写些什么
头文件(.h):写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):#ifndef CIRCLE_H#define CIRCLE_H//你的代码写在这里#endif这样做是为了防止重复编译,不这样做就有可能出错。至于CIRCLE_H这个名字实际上是无...转载 2018-11-29 21:59:58 · 485 阅读 · 0 评论 -
C++数值类型与string的相互转换
1.数值类型转换为string1.1使用函数模板+ostringstream使用函数模板将基本数据类型(整型、字符型、实型、布尔型)转换成string。//ostringstream对象用来进行格式化的输出,常用于将各种类型转换为string类型//ostringstream只支持&lt;&lt;操作符template&lt;typename T&gt; string toString(...转载 2018-11-14 21:48:52 · 3009 阅读 · 0 评论 -
c++中static的用法详解
C 语言的 static 关键字有三种(具体来说是两种)用途:1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。int foo(){ static int i = 1; // note:1 //int i = 1; // note:2 i += 1; return i;}要明白这个用法,我们首先要了解c/c++的内存分布,以及static所在的区间。对...转载 2018-11-15 15:30:52 · 261 阅读 · 0 评论 -
C++中substr函数的用法
#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;using namespace std;int main(){ string str(&quot;12345abc&quot;); string a = str.substr(0, 5); cout &amp;lt;&amp;lt; a &转载 2018-11-08 21:17:14 · 213 阅读 · 0 评论 -
VS 编译后 install报错(error MSB3073)
vs编译出现如下错误:错误 1 error MSB3073: 命令“setlocalH:\PCL_BACKUP\PCL\CMake\bin\cmake.exe -DBUILD_TYPE=Release -P cmake_install.cmakeif %errorlevel% neq 0 goto :cmEnd:cmEndendlocal & call :cmErrorLevel...转载 2018-11-13 22:26:02 · 8960 阅读 · 5 评论 -
error LNK2019-无法解析的外部符号 _main-该符号在函数 ___tmainCRTStartup 中被引用
问题分析:因为Win32 console Application的入口函数是Main(),而Win32 Application的入口函数才是WinMain()解决方案:右键项目,打开【属性】页,【配置属性】——【链接器】——【系统】中的【子系统】改为【窗口 (/SUBSYSTEM:WINDOWS)】 ,如下图所示:再次编译即可过通过测试!此部分转自 https://blog.csdn....转载 2018-11-13 21:40:12 · 16305 阅读 · 2 评论 -
C++ string
String 查找是否含有子字符串 string::size_type idx; idx=a.find(b);//在a中查找b. if(idx == string::npos )//不存在。 cout << “not found\n”; 从指定位置开始查找 a.find(i);//查找 ACSII为i的字符。 string st1(“babbabab”转载 2017-09-22 16:18:34 · 235 阅读 · 0 评论 -
C++总结二
C++排序库函数的调用(sort函数)参考 http://www.cnblogs.com/jjzzx/p/5122381.html http://blog.youkuaiyun.com/zzzmmmkkk/article/details/4266888/ sort(a,a+10); 从小到大排序 头文件为#include<algorithm>从大到小排序...原创 2017-07-26 09:39:24 · 451 阅读 · 0 评论 -
C++ 总结三
1.栈空间上面的局部变量默认初始化为随机值。全局整形变量和静态stati整形c变量默认初始值为0。 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次...原创 2017-09-04 10:47:38 · 605 阅读 · 0 评论 -
C++ string
String查找是否含有子字符串string::size_type idx; idx=a.find(b);//在a中查找b. if(idx == string::npos )//不存在。 cout << "not found\n";从指定位置开始查找a.find(i);//查找 ACSII为i的字符。string st1(...原创 2017-07-20 10:33:27 · 309 阅读 · 0 评论 -
C++ 总结一
vector>http://blog.youkuaiyun.com/qq_22764813/article/details/52613872vector 用法 http://blog.youkuaiyun.com/crisy1991/article/details/51553907 尾部插入元素vectorA;A.push_back(-1); 初始化int m;vect...原创 2017-07-20 11:02:53 · 229 阅读 · 0 评论 -
判断是否在同一个线程-GetCurrentThreadId()用法
线程在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。判断是否在同一个线程中的根本方法也比较简单,在Windows上直接用 GetCurrentThreadId() 比较;GetCurrentThreadId() 会直接输出线程id。...原创 2018-11-21 21:24:18 · 9119 阅读 · 0 评论 -
函数指针-如何理解typedef void (*pfun)(void)
问题:在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一“块”东西,而不是两“块”东西呢?那是谁“替代”了谁啊?我总结了一下,一方面是对typedef的概念不清晰,另一方面受了#define的影响,犯了定向思维的错误。概念理解:typedef 只对已有的类型进行别名定义,不产生新的类型;#define 只是在预处理过...转载 2018-11-29 16:08:32 · 1324 阅读 · 0 评论