C/C++编程
文章平均质量分 54
code_greenhand
这个作者很懒,什么都没留下…
展开
-
switch在内存中的实现机制
首先我们知道if...else和else...if这些条件判断是依次判断,我们都会把数据量大的尽量放到前面去执行先判断以提高程序效率,而switch实现机制和if...else不一样,switch和case判断的条件上下顺序无关,它在内存中的实现是靠一张表依次存放case的,无论你编写是case 1,2,3,4,5还是case5,4,3,2,1在内存中存放都是按1,2,3,4,5依次存放的,所以c...原创 2019-03-24 12:39:49 · 934 阅读 · 0 评论 -
STL-map容器
#include#include#include#includeusing namespace std;//对组:对组是一个类型,把两个值合成一个值,两个值可以是不同类型void mypair(){ pair mypa(10, "aaa"); cout << mypa.first << mypa.second << endl; pair mypa2 = make_pair(20原创 2017-10-04 17:50:52 · 189 阅读 · 0 评论 -
C++三大特性
封装:把客观事物封装成抽象的类,并且类可以把自己的成员属性和成员方法只让可信的类或者对象操作,对不可信的进行信息隐藏就是类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。继承:继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的成员属性和成员方法。继承的作用:避免公用代码的重复开发,减少代码和数据冗余多态:多态性可以简单地概括为“...原创 2017-05-18 13:20:54 · 406 阅读 · 0 评论 -
sizeo类的大小
#include<iostream>using namespace std;class student{public: int a; char *p; void fun1(); void fun2(); static void fun3(); virtual void fun4();};int main(){ cout << sizeof...原创 2017-05-18 14:18:41 · 616 阅读 · 0 评论 -
结构体内存对齐
#include<stdio.h>struct student{ int a; char b; double c;};int main(){ printf("%d\n", sizeof(struct student)); getchar(); return 0;}输出结果是16原因在于内存对齐原则,内存对齐是为了提高访问效率,为了访问未对齐的...原创 2017-05-18 15:30:15 · 230 阅读 · 0 评论 -
C语言编译过程和内存分区
1预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法 命令:gcc-Ehello.c -o hello.i2编译:检查语法,将预处理后文件编译生成汇编文件 命令:gcc-Shello.i -o hello.s3汇编:将汇编文件生成目标文件(二进制文件) 命令gcc-chello.s -o hello.o4链接:C语言写的...原创 2017-05-18 15:44:14 · 383 阅读 · 0 评论 -
数组名和取地址数组名的区别
总结:数组名和对数组取地址的区别就是步长不一样原创 2017-05-22 17:02:44 · 381 阅读 · 0 评论 -
C/C++static关键字的作用
1 c语言中static修饰函数/变量:所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问;static修饰函数和变量时,变量和函数就变成了内部链接,外部不可见,(作用域只在本文件)其他源文件不能访问代码例子如下:.h文件#pragma oncestatic void testc();.c文件#include<stdio.h>...原创 2017-05-22 17:30:06 · 462 阅读 · 1 评论 -
单例中自动内存管理
#include#includeusing namespace std;//单例就是一个类中只有一个实例(对象)class print{//构造函数一定要私有,这样外部就创建不了对象private: print(){ number = 0; }; print(const print& p){};private: static print* Pprint; int numb原创 2017-05-22 19:36:49 · 227 阅读 · 0 评论 -
float浮点数比较问题
注意点:不可将浮点变量用“==”或“!=”与任何数字比较;因为无论是float还是double类型的变量,都有精度限制;所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“假设浮点变量的名字为y应该将 if (y== 0.0) 转化为 if ((y>=-EPSINON) && (yEPSINON是允许的误差(即精度)if ( fabs(x)原创 2017-05-24 00:19:08 · 377 阅读 · 0 评论 -
联合体赋值问题
#includeunion{ int x; char c[2];}a;int main(){ memset(&a, 0, sizeof(a)); a.c[0] = 1;//在字节中转化为二进制00000001 a.c[1] = 2;//在字节中转化为二进制00000010 //int 4个字节读取变成00000000 00000000 00000010 00000001原创 2017-05-24 00:59:13 · 1858 阅读 · 0 评论 -
构造函数初始化列表和构造函数的区别
构造函数初始化列表是显式的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,初始化和赋值对内置类型的成员没有什么大的区别,对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。但有的时候必须用带有初始化列表的构造函数:1.成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会...原创 2017-06-20 19:28:44 · 1632 阅读 · 0 评论 -
fread第二个参数和第三个参数互换注意点——————————函数指针定义注意
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)第一个参数:读取数据放入的首地址第二个参数:一次读取多少个字节第三个参数:读多少次size第四个参数:读取文件的文件指针返回值:返回第三个参数,如果小于第三个参数就返回实际读取的大小,如果读取的内容小于第二个参数会发生读到文件结尾(返回值为0)或者发生原创 2017-10-16 17:43:42 · 1020 阅读 · 0 评论 -
vs安装番茄助手和基本使用快捷键
安装Visual Assist X自己在网上找破解版,安装好以后只要把VA_X.DLL替换原来的VA_X.DLL可以了,原来的VA_X.DLL自己在电脑里面搜1 安装好VAS打开VS2010之后,首先关闭VA outline与VA View窗口,个人感觉没啥用,2 关掉VS的状态栏,感觉它最大的用处就是显示行号,却占用了一整行的屏幕空间,如果你想知道现在的行号,你可以打开行号显示或者按CTRL+G...转载 2018-04-03 18:29:17 · 6939 阅读 · 1 评论 -
c语言函数调用原理底层分析
1函数的功能主要是为了复用性,不同的属性可以参数化2函数调用机制2.1按调用约定传递参数2.1调用约定调用方(caller)和被调方(callee)需要约定以下内容:1传参顺序2传递参数的媒介(是放栈还是寄存器)3清理参数的责任归属4返回值的传递媒介(返回值是放栈还是寄存器)__cdecl:传参顺序从右往左;使用栈顶传递参数;由调用方清理参数;...原创 2019-03-26 22:51:27 · 1937 阅读 · 0 评论 -
利用栈和队列数据结构实现中缀转后缀表达式
中缀转后缀**后缀表达式的运算过程**:遇到数字入栈,遇到运算符从栈中弹出两个元素,结算结果,结果入栈,继续扫描.**中缀转后缀**:```1. 扫描字符串,遇到数字,入队2. 遇到符号 2.1 如果栈为空则入栈 2.2 符号为左括号则入栈 2.3 符号为右括号,则依次弹出栈顶符号入队,直到遇到左括号 2.4 如果栈不为空,则与栈中符号比较优先级...原创 2019-06-19 00:08:02 · 690 阅读 · 0 评论 -
c++继承内存分布实例
单继承中没有虚函数#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include <fstream>#include <iostream>using namespace std;class ...原创 2019-05-18 15:22:53 · 632 阅读 · 0 评论 -
c语言的堆结构
创建堆时堆的前20个字节是堆的附加信息,每4个字节代表其中一个信息1(第一个4个字节):前一个堆的地址,如果是0的话表示自己是第一个创建的堆2:后一个堆的地址,如果是0的话表示自己是最后一个创建的堆3:创建堆的文件信息(堆在哪个文件创建的)4:创建堆在代码中的行数5:堆空间多大6:堆类型7:第几次申请:堆8:堆的上溢标志9:堆的内容10:堆的下溢标志这个...原创 2019-04-18 23:42:40 · 696 阅读 · 0 评论 -
c语言格式化不准确输出问题
#include<map>#include<algorithm>#include <iostream>using namespace std;int main(){ __int64 a=1; int b=2; char tmp[10]={0}; sprintf(tmp,"%d,%d",a,b); cout<<tmp<&l...原创 2018-08-14 18:21:15 · 287 阅读 · 0 评论 -
jsoncpp简单使用
Jsoncpp主要是FastWriter,Reader,Value这上类FastWriter主要是write方法将json格式数据编码成string字符串Reader主要是parse方法将string字符串解析成json数据格式Value用于存储各样格式的数据比如object,array,string,number,true/false,null等解析json数组例子Jso...原创 2018-06-25 15:01:36 · 365 阅读 · 0 评论 -
windows下多线程同步
互斥量(锁)适用范围:可以跨进程同步,还可以用来保证程序只有一个实例运行(创建命名互斥量),也可以用来做线程间的同步#include<Windows.h>#include<iostream>using namespace std;int money=0;HANDLE hMutex;//线程1回调函数//希望两个线程把monery加到100,线程1休眠的时候让...原创 2018-05-04 18:26:44 · 695 阅读 · 0 评论 -
一篇不错的通俗易懂理解IO复用、多进程和多线程三种并发编程模型文章
转载自https://blog.csdn.net/wan_hust/article/details/38441455#t1我们为什么要用多线程/多进程,多路io复用,毫无疑问是为了提高服务器性能和效率,单个进程处理几个连接是没有问题的,但是服务器一般处理的都是成千上万的连接,这么多连接,可想而知一个进程处理效率得多低,这就相当于一个饭店只有一个服务员招待所有客人,这时候我们想的肯定是招人帮忙,这就...转载 2018-04-21 15:37:20 · 2275 阅读 · 0 评论 -
windows下多路io select模型编程
select( _In_ int nfds,//为了兼容的参数,忽略填0 _Inout_opt_ fd_set FAR * readfds,//可读套接字集合指针 _Inout_opt_ fd_set FAR * writefds,//可写套接字集合指针 _Inout_opt_ fd_set FAR * exceptfds,//错误套接字集合指针 _In_opt_ c...原创 2018-04-24 23:01:58 · 679 阅读 · 0 评论 -
VLD(Visual LeakDetector)内存泄露库的简单使用
vld下载http://vld.codeplex.com/ http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio 安装的时候会有让你选择是否加载库和头文件目录,选择了就不需要手动添加手动添加:打开Visual C++ IDE的"工具"→"选项"→"项目和解决方案"→"V...原创 2018-04-24 14:16:02 · 628 阅读 · 0 评论 -
windsow socket实现tcp,udp连接编程
tcp创建socket流程图udp创建socktet流程图实现看源码tcp server#include <stdio.h>#include<WinSock2.h>#pragma comment(lib,"ws2_32.lib") //加载ws2_32.lib库int main(){ WSADATA wsadata; WORD SockVersion = M...原创 2018-04-18 22:29:06 · 403 阅读 · 0 评论 -
VS2010断点设置技巧
转载自:http://blog.csdn.net/jcx5083761/article/details/7770107一、跳到当前光标处(Ctrl+F10)我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时...转载 2018-04-13 09:45:16 · 267 阅读 · 0 评论 -
代替结构体中定义指针奇淫技巧
#define _CRT_SECURE_NO_WARNINGS#include#includetypedef struct stu{ int i; char c[0];}s;int main(){ s* stu = malloc(sizeof(s)+10); stu->i = 100; strcpy(stu->c, "hello"); printf("%s\n",stu->原创 2017-06-21 00:00:05 · 174 阅读 · 0 评论 -
c++继承
c++继承是c++的三大特性之一,目的是解决代码的复用性继承有三种继承方式,最常用的是public继承三种继承方式: public : 公有继承private : 私有继承protected : 保护继承不同方式继承时,继承的成员权限会改变,对子类来说继承过来的成员只要不是私有成员子类内部都可以访问,因为继承的成员拷贝了一份给子类,这些成员是属于子类的原创 2017-09-06 00:58:23 · 216 阅读 · 0 评论 -
poco库的简单实现单元测试
Ctest.h文件。被测试的类#pragma once#include//被测试的类class Ctest{public: int testadd(int a, int b); char Str(); void test();};Ctest.cpp文件。被测试的类#include "Ctest.h"int Ctest::testadd(int a, int原创 2017-09-06 19:17:06 · 1517 阅读 · 0 评论 -
数据结构—类模板实现链表
template_linklist.hpp#pragma once#includeusing namespace std;//链表节点templateclass LinkNode{public: T data;//如果T是类类型的话记得一定要要在类内提供默认构造函数 LinkNode* next;};//链表templateclass LinkList{pu原创 2017-09-20 19:35:33 · 522 阅读 · 0 评论 -
STL工作机制
#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;templateclass Array{public: typedef T* itertor;//迭代器 Array() { Size = 10; Capacity = 10; PAddress = new T[Capacity]; for (i原创 2017-09-26 14:56:48 · 235 阅读 · 0 评论 -
STL-vector容器
vector容器:数据结构是动态数组注意点:vector的动态增长不是在原来的空间上接上一片空间,而是重新开辟一片更大的空间,把原来的空间拷贝到新的空间后,释放原来的空间#define _CRT_SECURE_NO_WARNINGS#include//容器#include //算法头文件#include#includeusing namespace std;//1存放普通数据原创 2017-09-26 16:15:49 · 227 阅读 · 0 评论 -
STL-stack容器
#includeusing namespace std;#include//stack没有迭代器#include/*stack构造函数stack stkT;//stack采用模板类实现, stack对象的默认构造形式:stack(const stack &stk);//拷贝构造函数stack赋值操作stack& operator=(const stack &stk);//重原创 2017-10-02 13:08:57 · 193 阅读 · 0 评论 -
STL-deque容器
#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;#include#include#include#include#includevoid PrintDeque(deque& d){ for (deque::const_iterator it = d.begin(); it != d.end(); ++it)原创 2017-10-02 13:11:30 · 172 阅读 · 0 评论 -
STL-queue容器
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;#include#includevoid test1(){ queue q; q.push(10); q.pu原创 2017-10-02 13:35:44 · 163 阅读 · 0 评论 -
STL-list容器
#include#include#include#includeusing namespace std;//list是一个循环的双向链表void test1(){ list MyList; for (int i = 0; i < 10; ++i) { MyList.push_back(i); } list::_Nodeptr node = MyList._Myhead-原创 2017-10-03 22:16:20 · 256 阅读 · 0 评论 -
STL-set容器
#include#includeusing namespace std;#include#include/*set st;//set默认构造函数:mulitset mst; //multiset默认构造函数:set(const set &st);//拷贝构造函数insert(elem);//在容器中插入元素。clear();//清除所有元素erase(pos);//删除p原创 2017-10-04 16:42:27 · 226 阅读 · 0 评论 -
C++中const和#define的优缺点和c语言const的修饰的一些注意点
在c++中const 对于基础数据类型都会在预处理阶段被替换掉如const int a=100,,例子:int main(){ const int a = 100; int* p = (int*)&a; *p = 200; cout << "a="<<a << endl; cout << "*p="<<*p<< endl; system("pause"); return 0;原创 2017-05-18 14:54:00 · 361 阅读 · 0 评论 -
c/c++中const区别
c语言const修饰的变量是只读变量,既然是变量就会是分配内存,c语言中const修饰的全局变量默认是外部链接,在c++中,一个const不必创建内存空间,而在c中,一个const总是需要一块内存空间c++什么时候分配内存:1对修饰的对象取地址,2 extren修饰全局变量3用变量赋值4类对象都分配内存,c++中const默认是内部链接,外部不能访问原创 2017-05-18 14:37:16 · 273 阅读 · 0 评论 -
STL-函数对象适配器
#include#include#include#include#includeusing namespace std;/*template inlinevoid _For_each(_InIt _First, _InIt _Last, _Fn1& _Func){ for (; _First != _Last; ++_First) { _Func(*_First); }原创 2017-10-09 19:06:28 · 203 阅读 · 0 评论