C++
文章平均质量分 65
想飞的IT猪
这个作者很懒,什么都没留下…
展开
-
c++的algorithm头文件定义了一个count的函数和一个叫做count_if的函数
count(ivec.begin() , ivec.end() , searchValue)count:在序列中统计某个值出现的次数count_if :在序列中统计与某谓词匹配的次数bool greater10(int value){ return value >10;}count_if(v1.begin(), v1.end(), greater10);...原创 2021-11-05 17:44:40 · 740 阅读 · 0 评论 -
C++流的概念
在C++语言中,数据的输入和输出(简写为I/O)包括对标准输入设备键盘和标准输出设备显示器、对在外存磁盘上的文件和对内存中指定的字符串存储空间(当然可用该空间存储任何信息)进行输入输出这三个方面。对标准输入设备和标准输出设备的输入输出简称为标准I/O,对在外存磁盘上文件的输入输出简称为文件I/O,对内存中指定的字符串存储空间的输入输出简称为串I/O。C++语言系统为实现数据的输入和输出定义了一个庞大的类库,它包括的类主要有ios,istream,ostream,iostream,ifstream,of..转载 2021-11-05 13:50:47 · 1790 阅读 · 1 评论 -
关于正向迭代器和反向迭代器的一些差异
1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。2. 作用(1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。(2)可以通过reverse_iterator::base()将反向转载 2020-10-23 16:23:07 · 1220 阅读 · 0 评论 -
多线程中的共享变量是bool值,而bool值充当循环的判断条件的时候的处理方式
多线程中bool值,如果想要保证其安全性,c++中:1>可以考虑使用atomic,而且c++中的atomic经常对bool值进行处理,比如std::atomic<bool> ready (false);这样修改或者读取这个的bool值ready的时候,就可以是原子,是独占的,不可以被其他线程影响。尤其是在循环中充当循环的判断条件的时候。假设子线程里将ready更改为truewhile(ready){}java中:可以考虑使用Atomic类...原创 2020-10-23 16:10:01 · 1547 阅读 · 0 评论 -
关联式容器使用char*充当key或者value的时候
比如说map,如果使用char*当作key,或者value的时候,可能因为char*,只是指针(地址)而发生意想不到的bug,因为一旦对这个map对象赋值,他只存储指向某个变量的指针变量,而以前的那个变量的地址如果是可重入的,那更改这个变量的同时,就会将map对象里存储的指针变量的存储更改。#include<iostream>using namespace std;#include<map>#include<string>#pragma warning(原创 2020-10-23 15:56:38 · 456 阅读 · 0 评论 -
关于条件判断语句if的括号里能否是字符串
string s=“shop”;if(s),此时是会编译出错的,因为if的括号里只能是bool值,或者可以转换为bool的值。if(s.c_str())此时返回的是指针,是指向s串的缓冲区的指针。那么此时这个此时就是以这个指针所表示的地址来判断的string s=“123”;if(atoi(s.c_str()),这个是将c_str指向的s的缓冲区存储的数字组成的串转换为真实的数字。...原创 2020-10-14 15:29:38 · 1951 阅读 · 0 评论 -
Error on Xcode "No matching function for call to 'max'"
这个的错误一般是因为max的参数是需要两个都是相同类型的,max()requires that the first and second arguments are of the same type原创 2020-03-23 09:00:22 · 1987 阅读 · 2 评论 -
char temp[1000002] = { " " };和char temp [1000002]={' '};的区别
第一个花括号里包含着双引号,则除了一个空格外还隐含着一个‘\0’,因为双引号是用来包含字符串的,所以末尾是有一个‘\0’的,而后面的单引号是不包含‘\0’的,只包含一个空格...原创 2020-01-25 13:08:22 · 679 阅读 · 0 评论 -
strlen(NULL)可以有吗
我们知道c语言中字符串可以通过char *c=“dehddh”;,然后求这个的长度strlen(c),但是如果char *c=NULL;,那么strlen是否还可以求值呢,答案是不可以的,因为NULL并不是一个字符串,所以如果strlen(c)会发生异常。...原创 2019-11-15 20:56:56 · 4293 阅读 · 1 评论 -
二级指针的使用
二级指针的使用其实很简单,但是会遗忘,所以这里记录一下,比如int * a=&b;那么二级指针就是int ** c=&a;也就是说a是一个指针,而c是一个二级指针,所以对指针取地址,也就是指了两次,也就是二级指针了。...原创 2019-11-11 21:17:00 · 274 阅读 · 1 评论 -
c++里的getline函数
c++中的getline函数,getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。在C++中本质上有两种getline函数:第一种:在头文件<istream>中,是iostream类的成员函数。第二种:在头文件<string>中,是普通函数。第一种:在<istream>中的getlin...转载 2019-10-17 08:51:06 · 6971 阅读 · 1 评论 -
c++编程提示function definition is not allowed here
function definition is not allowed here这是因为函数内部不能再定义函数,原创 2019-10-16 23:26:14 · 16903 阅读 · 0 评论 -
关于C++中 指针,地址,指针变量 三者之间的区别和联系:
指针是C和C++的重点,也是后面学习数据结构的基础,因此深刻理解指针的概念很重要。但是指针的概念比较抽象,难于理解,而且一些复杂的程序中都是离不开指针的,如果不能理解指针,那么就不能理解较为复杂的程序了,作者结合了自己学习C++的经验,对指针,指针变量,地址作如下阐述。1.什么是指针: 程序中最离不开的就是变量,而变量相当于是一个容器,是用来存放数据的,变量是存放在内存中的...转载 2018-08-17 22:49:02 · 1836 阅读 · 2 评论 -
const修饰的变量的存储位置
c语言中const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放。而const局部变量(局部变量就是在函数中定义的一个const变量,)存储在栈中,代码块结束时释放。在c语言中可以通过指针对const局部变量进行修改,而不可以对const全局变量进行修改。因为const全局变量是存储在只读数据段而c++中,一个const不是必需创建内...原创 2019-01-17 15:13:39 · 15664 阅读 · 4 评论 -
C语言深度解剖笔记2之柔性数组和动态数组
柔性数组是c99引进的,在c99中,结构体的最后一个成员我们允许是未知大小的数组,这个数组我们就叫做柔性数组,而且在这个柔性数组之前必须有至少一个其他成员。sizeof 返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构体内存的大小,以适应柔性数组的预期大小。如下:typedef struct st_typ...原创 2019-01-18 16:28:06 · 241 阅读 · 0 评论 -
c++中的关键字strut与class的区别
在C++里struct 关键字与class 关键字充当类时可以互换,但是struct创建的类默认是public的,而class是private的原创 2019-01-18 16:40:15 · 323 阅读 · 0 评论 -
C语言深度解剖笔记3之符号
接续符和转义符C 语言里以反斜杠(\)表示断行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格,反斜杠除了可以被用作接续符,还能被用作转义字符的开始标识,比如\n 回车换行\t 横向跳到下一制表位置。单引号、双引号双引号引起来的都是字符串常量,单引号引起来的都是字符常量,字符串本质上是多个字符组成的字符数组...原创 2019-01-19 13:37:43 · 206 阅读 · 0 评论 -
C语言深度解剖笔记6之内存管理;
什么是野指针野孩子:没人要,没人管的孩子;行为动作不守规矩,调皮捣蛋的孩子。所以野指针就是指向不明,指向地址随机的指针。定义指针变量的同时最好初始化为NULL,用完指针之后也将指针变量的值设置为NULL。也就是说除了在使用时,别的时间都把指针“栓”到0 地址处。这样它就老实了。栈、堆和静我们可以简单的理解为内存分为三个部分:静态区,栈,堆。堆栈就是栈,静态区:保存自动全局变量和...原创 2019-01-25 00:02:27 · 148 阅读 · 0 评论 -
C语言深度解剖笔记4之预处理
#define#define用来定义宏,也可以用来定义字符串,尤其是路径,如C), #define ENG_PATH_3 E:\English\listen_to_this\listen\有的系统里规定路径的要用双反斜杠“\\”,用define 宏定义表达式#undef:#undef 是用来撤销宏定义的 用法:#define PI 3.141592654…// code#un...原创 2019-01-20 14:34:31 · 169 阅读 · 0 评论 -
C语言深度解剖笔记之关键字
1.c语言关键字有32个之多,这里主要挑选几个重要的说一说:auto :声明自动变量,就是说这个auto声明一个变量是自动变量,所谓自动变量就是自动存储变量,也就是需要开辟内存来存储这个变量,编译器在默认情况下将所有变量都认为是auto的c语言中使用auto修饰一个变量,这个变量可以先不初始化,编译器会使用一个随机值值初始化auto修饰的变量,即可以先定义再初始化,为了避免一个变量是随机值...原创 2019-01-15 11:45:22 · 276 阅读 · 0 评论 -
声明与定义的区别
定义的时候是开辟内存,并将为这块内存取上一个名字,这块内存的位置是不变的,所以不能多次定义同名变量或者对象声明是未分配内存空间原创 2019-01-16 12:13:06 · 432 阅读 · 0 评论 -
变量的命名规则
1.可以望文生义2.用最少的文字表达最多的意思,min_length&&max_information3.当标识符由多个单词组成时,每个单词的首字母大写。int CurrentVal;。4.函数名不能再被用于定义变量。void foo(int p_1){int x = p_1;}void static_p(void){int foo = 1u;//err...原创 2019-01-16 13:02:22 · 202 阅读 · 0 评论 -
不同类型的变量与零值的比较。
bool类型,bool值分为TRUE和FALSE,FALSE是0,TRUE是非0,所以一般在if语句后面的括号一般是if(FAlSE)和if(!FALSE),这个和if(0),if(!0)一样。float类型与零值比较,这个要设置精度范围,用一个精度范围来表示0,指针变量与“零值”进行比较int* p = NULL;,写为if(NULL == p); if(NULL != p);这样的...原创 2019-01-16 21:35:25 · 192 阅读 · 0 评论 -
解析内存对齐 Data alignment: Straighten up and fly right的详解(内存存取颗粒)
https://www.jb51.net/article/36726.htm为了速度和正确性,请对齐你的数据. 概述:对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响.就像本文章阐述的一样,理解了对齐的本质还能够解释一些处理器的"奇怪的"行为.内存存取粒度程序员通常倾向于认为内存就像一个字节数组.在C...原创 2019-11-08 10:06:06 · 186 阅读 · 0 评论 -
大并发服务器的多线程与并发服务器设计: 常见并发服务器方案
1.循环式/迭代式服务器:无法充分利用多核CPU,不适合执行时间较长的服务,即适用于短连接(这样可以处理多个客户端),如果是长连接则需要在read/write之间循环,那么只能服务一个客户端。所以循环式服务器只能使用短连接,而不能使用长链接,否则无法处理多个客户端的请求,因为整个程序是一个单线程的应用程序,如果a的处理请求不能断开(使用长链接)那么下一个客户端的请求将不能连接上。因为是单线程...原创 2019-04-16 20:49:43 · 775 阅读 · 0 评论 -
大并发服务器设计下的一些常见的linux问题
1.Linux能同时启动多少个线程?对于 32-bit Linux,一个进程的地址空间是 4G,其中用户态能访问 3G 左右,一个线程的默认栈 (stack) 大小是 8M,所以一个进程大约最多能同时启动 350 个线程左右。有的地方说一个线程的默认栈大小是10M,反正如果口算的话,把8M看成10M,把1G=1024M近似看成是1000M,所以是3*1000除以10=300,所以约为300多...原创 2019-04-17 02:23:33 · 144 阅读 · 0 评论 -
关于宏定义出现警告warning C4067: 预处理器指令后有意外标记
#ifndef test.h#define test.h#include<iostream>using namespace std;class Singleton{public: static Singleton* getinstance() { return instance; } private: Si...原创 2019-04-25 23:54:09 · 8411 阅读 · 0 评论 -
惊群效应
1.什么是惊群。我的理解:惊群就是惊了一群,也就是说,某一事件发生后,同时唤醒了多个甚至一群等待这一事件发生的进程或者线程。2.惊群产生的影响:1>一群同时被唤醒的线程或者进程只能有一个能获取到这个发生事件的控制权。其他的被唤醒的线程和进程又只能进入休眠或者阻塞状态,等待这个事件的下一次发生,系统对用户进程/线程频繁地做无效的调度,频繁的切换进程的上下文(比如说文件的打开模...原创 2019-04-23 15:18:10 · 444 阅读 · 0 评论 -
在vs2013下优先队列priority_queue的第三个参数less不报错,greater报错的解决方法
如果greater的第三个参数提示Error:greater不是参数。那么需要加入头文件#include <functional>。原创 2019-04-28 16:20:49 · 938 阅读 · 0 评论 -
数据库范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式,满足最低要求的叫第一范式,简称1NF;在第一范式中进一步满足要求的为第二范式,其余依次类推。其中数据的三个重要范式就是第一,第二,第三范式。范式就是数据库存储数据时的一些要求。第一范式:当关系模式R(relationship)的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是...原创 2019-04-24 14:09:49 · 222 阅读 · 0 评论 -
关于vs上cout字符串时,出现没有这些操作数匹配的流运算符的编译错误。
虽然c++支持string类型,而且在c++只要写上#include<iostream> using namespace std,这个string就不会出错,但是关于对字符串的各种运算符的重载,在string头文件里(#include<string>)。其中<<是流运算符重载。...原创 2019-05-09 00:11:34 · 674 阅读 · 0 评论 -
杂项
1.关于求一维指针或者一维数组存储的字符串的长度的方法:char *str;或者charstr[]是用来存储字符串的,这个求字符串的长度时,要么for循环遍历,要么可以使用strlen函数,但是如果使用string str来声明变量str,求str的长度可以是str.size().2.关于使用指针遍历数组的问题:指针遍历数组,不必定义一个指针变量,完全可以使用数组名加下标的形式,而且只...原创 2019-05-09 03:23:06 · 99 阅读 · 0 评论 -
原码,反码,补码
只有有符号数才有原码反码补码,其在内存中是以补码的形式存储,无符号数在内存中是以二进制数的形式存储的!正数的原码反码补码相同。负数的原码首位是符号位,用1占这个位表示负数,其余位等于其绝对值数的原码(比如-8的源码是1000 1000,至于为啥是8位,因为计算机存储的最小单位是字节,1字节是8比特位)。负数的反码等于除符号位外对其原码逐位取反。负数的补码在其反码的基础上加1....原创 2019-05-19 17:14:38 · 176 阅读 · 0 评论 -
指针的几个运算
指针的算术运算与解引用指针的加减:指针的加减是是加类型(指针的类型,)类型是几个字节,指针就向前或者向后走几个字节。指针的解引用:指针的类型决定了在对指针进行解引用的时候,能访问多少个字节,比如对char*的指针变量进行解引用只能访问一个字节,对int*的指针变量解引用能访问4个字节。一般这种操作出现在对地址的强转上,借以扩充或者缩小可以访问的地址的范围。这个在多态的虚函数表那块有应用。...原创 2019-05-20 00:16:48 · 2464 阅读 · 0 评论 -
c语言中字符串的存储方式。
c语言中没有字符串类型,而c++中有字符串类型string。所以c语言使用两种方式来存储字符串。char*和char[],char*a="123456";右面的123456是字符串常量,所谓常量就是这个值是保存在内存中的字符串常量区。每个字符串后面都有系统预设的结束符"\0",char a[ ]="123456";//这个是将字符串保存在数组里。这个是数组初始化。相当于a[0]=1,a[1...原创 2019-05-20 11:11:42 · 19032 阅读 · 0 评论 -
c++中break和cintinue的区别
break:结束当前整个循环,执行当前循环下边的语句,忽略循环体中任何其它语句和循环条件测试。continue:终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。注意:continue只能用于循环,而break只能用于循环或者switch,循环比如while循环,for循环,等等,不能用于判断语句,往往在代码量较大的时候,我们就可能忘了...原创 2019-05-15 16:11:45 · 746 阅读 · 0 评论 -
c++中哪儿有现成的min函数和max函数
在头文件<windows.h>中定义了min,max的宏,#definemin(a,b) (((a)<(b))?(a):(b)),同理,max也是这样定义的。在头文件c++的<algorithm>也有的相应的min和max函数,两者用其一即可...原创 2019-05-16 10:26:48 · 9897 阅读 · 1 评论 -
宏和函数的不同之处
宏和函数的不同之处代码长度:宏是将代码嵌入到程序中。程序的代码长度会增加 ///////////函数代码只出现在一个地方。每次使用这个函数时调用这个代码即可.执行速度:宏更快,宏只是简单的替换,而函数需要栈的参与操作符优先级:宏只是简单的替换,所以代码的上下文的符号可能会改变原本的宏的优先级,除非宏有括号括着,而函数没有这样的担忧。参数类型:宏与类型无关,而函数的参数是与类型...原创 2019-05-16 14:12:06 · 234 阅读 · 0 评论 -
命令行定义符号大小
许多C的编译器提供了一种能力,允许在命令行中定义符号,用于启动编译过程。#include<stdio.h>int main(){int array[ARRAY_SIZE];int i=0;for(;i<ARRAY_SIZE;i++){array[i]=i;}for(i=0;i<ARRAY_SIZE;i++){printf("%d",array[i...原创 2019-05-16 14:19:42 · 168 阅读 · 0 评论 -
使用c++创建链表的一种方法
#include<iostream>#include<vector>using namespace std;struct ListNode//定义节点,在c++中struct也是类。{ int val; ListNode *next;ListNode(int x):val(x),next(NULL){}};class Solution{publi...原创 2019-05-12 01:33:49 · 2410 阅读 · 0 评论