C++
小冯同学666
这个作者很懒,什么都没留下…
展开
-
C++中的c_str()函数用法
语法:1 const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针。比如:最好不要这样:1 char* c;2 string s="1234";3 c = s.c_str();c最后指向的内容是垃圾转载 2020-08-11 23:22:54 · 516 阅读 · 0 评论 -
C++编程中类之间的关系
1.依赖 (Dependency)2.关联 (Association)3.聚合 (Aggregation)4.组合 (Composition)它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合1.依赖:UML表示法:虚线 + 箭头关系:" … uses a …" 人需要空气 ,(作为一种工具使用)传参使用2.关联: 朋友的平等关系UML表示法:实线 + 箭头关系:" … has a …" 有没有的关系所谓关联就是某个对象会长期原创 2020-05-30 07:55:55 · 301 阅读 · 0 评论 -
C++中使用STL list 和find函数
作用:在具有指定值的范围内找到元素首次出现的位置。template<class InputIterator, class Type>InputIterator find(InputIterator _First, //一个输入迭代器,它在要搜索指定值的范围内寻址第一个元素的位置。InputIterator _Last, //一个输入迭代器,用于在要搜索的指定值范围内的最后一个元素之后的位置进行寻址。const Type& _Val//要搜索的值。);返回值:一个输入迭代原创 2020-05-29 12:20:36 · 9210 阅读 · 0 评论 -
C++函数声明的时候后面加const
转自:http://blog.csdn.net/zhangss415/article/details/7998123非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const转载 2020-05-29 10:51:38 · 219 阅读 · 0 评论 -
简单理解new delete 和malloc free 的区别
new delete 和malloc free 的区别malloc free 分配空间和释放空间new delete 分配空间和释放空间,并触发构造析构函数有时为了提高效率,用malloc和free时,需要手动进行调用构造和析构,并加上作用域,如:CPerson ps = (CPerson*)malloc(sizeof(CPerson));ps->CPerson ::CPersom();ps->CPerson::~CPerson();free(ps);...原创 2020-05-29 07:11:30 · 108 阅读 · 0 评论 -
不用+ - * /实现加法运算笔记
练习:不用+ - * /实现加法运算运用位&判断是否发生进位的二进制位置运用位^判断不需要进位的二进制位置比如 7 和 57的二进制位01115的二进制位0101首先判断需要进位和不需要进位的二进制数位置:0111 & 0101 = 0101。故需要进位的是第二位和第四位0111 ^ 0101 = 0010 。故不需要进位的是第三位将0101左移一位(进位):10...原创 2020-04-14 16:53:41 · 130 阅读 · 0 评论 -
异或 ^ 分析及使用
异或 ^ :相同为0,相异为1。如6^6 = 0;看二进制6:0110即:0110 ^ 0110 = 0;一堆数字用 ^:不同数字进行叠加,若出现相同的数字,则相互抵消相应的数字大小。如 1 ^ 2 ^ 1 = 2;...原创 2020-04-14 11:35:02 · 378 阅读 · 0 评论 -
虚析构作用及执行顺序
作用:通过父类指针去完整地删除子类的对象,防止内存泄漏执行顺序:从子类到父类依次执行析构函数。原创 2020-04-14 11:12:07 · 530 阅读 · 0 评论 -
调用函数的两种方式,函数指针的使用
调用函数的两种方式:1:函数名()2:(*函数指针名)()void show(int a){ cout<<"AA"<<a<<endl;}void show1(int a){ cout<<"AA"<<a<<endl;}int main(){ //函数名()-----功能固定 show(1); //...原创 2020-04-14 09:59:57 · 433 阅读 · 0 评论 -
C++继承与多态机制实现原理
父类类型的指针指向子类对象,父类指针可以指向任何一个子类对象优点:统一类型,提高复用性缺点:该指针只能使用父类中的成员以下代码说明其优点:class kk{};class aa:public kk{};class bb:public kk{};struct Node{ kk*p;};int main(){ Node node; node.p = new aa...原创 2020-04-14 09:09:54 · 657 阅读 · 0 评论 -
C++何时需要NEW对象,new和定义对象的区别
C++何时需要NEW对象一、CString str;不用new的内存区域是在栈,会自动分配空间,一般在局部变量时使用,函数结束后会自动释放空间,定义对象就是申明对象(静态)str有系统创建并释放,你不要担心会出现内存泄露,但是生命期只有在本区域的大括号内,出了大括号就没用了。构造函数应可以保证被执行,因为程序退出通路很多,你必须是正常的退出才可能保证析构函数被调用,当你创建一个类对象时,...转载 2020-04-14 08:44:41 · 1022 阅读 · 0 评论 -
函数、字符串整理笔记
做什么事起什么名一般首字母大写返回值类型 函数名 参数列表{return相对类型的值(void类型不需要返回值)}return只能返回一个值可以返回数组、结构体等结构中递归函数:(自己调用自己,改变参数之后,实现自我调用)必须有结束条件字符串字符‘0’48空格32A 65 a 97char a[] = “Hello”;栈区内,可更改char *b = “Hell...原创 2020-04-13 21:33:53 · 79 阅读 · 0 评论 -
数组分析笔记
数组:相同类型元素的集合且空间连续int arr[3] = {1,2,3};int arr[5];数组的名字:表示数组首元素的首地址,如arr&数组名字:表示整个数组的地址,如&arrsizeof(arr):是整个数组的大小arr == &a[0];此时为数组中1的地址arr+1;此时为数组中2的地址(表示往右偏移1个int)&arr+1;表示往右偏...原创 2020-04-09 22:10:50 · 101 阅读 · 0 评论 -
C++内存分析、堆区和栈区区别
内存中最基本的操作单元是字节对内存的三种操作:读、写、取地址对内存访问的方式:直接访问和间接访问对内存划分:堆区、栈区、字符常量区、代码区、全局/静态区全局和静态的区别:全局在该项目中所有文件中都可使用,而静态只在声明静态的类文件中使用。栈区:存放局部变量,声明的变量和函数方法堆区:存放的是面试常出现堆区和栈区的区别:1、分配方式不同:栈区系统分配系统回收;堆区由程序员手动申请,理...原创 2020-04-09 19:29:38 · 1006 阅读 · 0 评论 -
指针本质及类型判断
指针就是一个变量,一个装地址的变量int a = 1;int *p = &a;二级指针就是一个装着另一个指针地址的变量int **p2 = &p;那么如何看一个变量的类型?去掉变量名,剩下的就是这个变量的类型。如int a,变量a的类型是int型int *p,变量p的类型是int * 类型int **p,变量p的类型是Int ** 类型int p[],变量p的类...原创 2020-04-09 19:14:00 · 222 阅读 · 0 评论 -
C++的STL中accumulate的用法
accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理1.累加求和int sum = accumulate(vec.begin() , vec.end() , 42);accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。accumulate函数将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入...转载 2020-04-08 07:31:56 · 288 阅读 · 0 评论 -
vector拷贝
虽是细节,但使用不当,也容易造成严重错误。挖过填过的坑,记录一下。主要有以下几种方法vector list;list.push_back(1);list.push_back(2);一、初始化构造时拷贝vector tem(list);这种拷贝,相当于复制了一份数据,list中的数据不变。二、assignvector temlist;temlist.assign(list.beg...转载 2020-04-08 07:06:26 · 821 阅读 · 0 评论 -
MFC小碎点
SHBrowseForFolder()//显示浏览文件夹的对话框AfxGetMainWnd( ):使用AfxGetMainWnd函数获取MFC程序中的主框架类指针是一个常用作法。就是获得应用程序主窗口的指针,AfxGetMainWnd()-> m_hWnd是主窗口的句柄。m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,它是窗口类的一个句柄凡是从C...原创 2020-03-31 17:49:55 · 152 阅读 · 0 评论 -
C++的字符类型
转自:http://blog.sina.com.cn/s/blog_5a82024e0100bg4v.html现在C++的字符分成两种类型wchar_t和char。WCHAR==wchar_t;CHAR==char;TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。CHAR实施上就是unsigned char;WCHAR为宽字符;TCHAR根据是否支持unic...转载 2020-03-31 10:54:53 · 1801 阅读 · 0 评论 -
MFC
CPoint类类CPoint是对Windows结构POINT的封装,凡是能用POINT结构的地方都可以用CPoint代替。结构POINT表示屏幕上的一个二维点,其定义为:typedef struct tagPOINT{LONG x;LONG y;} POINT;其中 x、y分别是点的横坐标和纵坐标。由于CPoint提供了一些重载运算符,使得CPoint的操作更加方便。如运算符“+”...转载 2020-03-31 10:53:53 · 314 阅读 · 0 评论 -
C++小碎点
容器set优点 可以自动去重复ScreenToClient()//从屏幕转换到客户区STL不支持线程安全,当push和pop同时进行的时候就会报错,迭代器崩溃,不知道指针指向push还是pop解决这种问题,要么执行push,要么执行pop。1、用锁2、自己写个支持线程安全的队列//获取系统信息SYSTEM_INFO si;GetSystemInfo(&si);...原创 2020-03-28 21:02:44 · 125 阅读 · 0 评论 -
c++ map与unordered_map区别及使用
map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/78065438需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实...转载 2020-03-13 21:10:20 · 230 阅读 · 0 评论 -
delete指针以后应赋值为NULL
delete指针以后应赋值为NULLdelete p后,只是释放了指针中存放的地址中的内存空间。但是指针变量p仍然存在(即指针p本身所占有的内存),且p中存放的地址还是原来的地址。例如:对一个非空指针delete后,若没有将p赋为NULL,若再次delete的话,会出现问题。如下代码:#include <iostream>int main(){ int* p = ...转载 2020-03-11 15:50:10 · 644 阅读 · 0 评论 -
C++ vector容器类型及初始化方法
看到一篇很好的学习的vector虚容器的博文,分享给大家,感谢博主,对我帮助很大!!vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 :#include 使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。一、数组习惯用法定义一个已知长度的 vecto...转载 2020-03-07 16:50:06 · 5372 阅读 · 0 评论 -
C++ 动态数组 vector 详解
一、引入引入:略vector收录在STL里,是一种特殊的数据结构。它的中文名字叫做“动态数组”或者“不定长数组”,有时也被翻译成“容器”。说白了,vector就是一个功能强大的数组。下面让我们来体验它强大的功能吧!二、vector的头文件vector收录在std库里,所以调用vector需要#includeusing namespace std;这两个头文件。三、v...转载 2020-03-07 16:30:33 · 1953 阅读 · 0 评论 -
创建线程函数,设置静态线程函数
创建线程函数uintptr_t _beginthreadex(void *security, //线程的安全属性unsigned stack_size,//线程大小unsigned ( __stdcall *start_address )( void * ),//线程函数void *arglist,//线程参数unsigned initflag,//标识,设置为0,标识立即运行uns...原创 2020-03-03 13:28:41 · 452 阅读 · 0 评论 -
C/C++让人头大的指针类型
① 函数指针指向一个函数的指针如:char FUN(int);char (*pfun)(int);pfun = FUN;② 指针函数返回一个指针的函数如char *FUN(int);③ 数组指针指向一个数组的指针如char array[5];char (*p)[5];p = &array;④ 指针数组存放指针的数组char *p[5];//存放5个指针的数组...原创 2020-03-03 12:59:03 · 132 阅读 · 0 评论 -
C/C++ 获取文件大小
在C语言中测试文件的大小,主要使用二个标准函数。1.fseek函数原型:int fseek ( FILE * stream, long int offset, int origin );参数说明:stream,文件流指针;offest,偏移量;orgin,原(始位置。其中orgin的可选值有SEEK_SET(文件开始)、SEEK_CUR(文件指针当前位置)、SEEK_END(文件结尾)。函...转载 2020-02-28 11:46:05 · 849 阅读 · 0 评论