c++
qq_37058442
这个作者很懒,什么都没留下…
展开
-
引用和指针
引用 & 前面跟 类型就是引用一经引用不能给在引用别的()引用和指针在汇编上一样访问局部变量都是通过ebp的偏移来找的使用引用变量时自动解引用原创 2017-05-10 15:12:46 · 201 阅读 · 0 评论 -
智能指正和强弱指针的实现
#include #include #include using namespace std;class maps_ptr{public: static maps_ptr * getptr() { if(inst==NULL) { inst=new原创 2017-06-22 12:17:36 · 359 阅读 · 0 评论 -
stl vector
//#include //#include //#include //函数对像//#include //#include //#include //using namespace std;////using namespace std;//template//class vector//{//public:// vector() :mpvec(null),msize(0)原创 2017-06-10 13:59:39 · 210 阅读 · 0 评论 -
hashmap的实现
#include <vector>#include <list>#include <iostream>#include <string>using namespace std;template <typename T,typename V>struct mypair{ mypair(T key=T(),V value=V(...原创 2017-06-11 12:24:13 · 216 阅读 · 0 评论 -
定位n ew 和 空间配置器实现内存池(vector的实现过程)
#include #include using namespace std;template//空间配置器class myalloctor{public: typedef _Ty *pointer; typedef const _Ty *const_pointer; typedef _Ty& reference; typedef const _Ty& const_referen原创 2017-09-08 15:50:19 · 862 阅读 · 0 评论 -
vector 容器内部的实现(数组)具体实现参考boost库在另一篇文章
#include #include #include //函数对像 #include #include #include using namespace std; using namespace std; template class vector { public: vector() :mpvec(nu原创 2017-06-20 21:57:02 · 470 阅读 · 0 评论 -
int operator *() 和operator int*()的区别
NULL 0 和 c ++ 11 nullptr简单描述就是因为c语言有隐士类型转换所以(void*)可以转化为任意一种指针可是c++并不提供这种方式所以在一些赋值操作中要强转,为了兼容和使用上的一致就定义了c++ NULL 是0 但是这个0又会产生和数字0的奇异性造成使用上的麻烦,所以产生了一个新的机制c++11提供的nullptr 具体定义如下图C++运算符重载 "转载 2017-09-27 23:41:25 · 4766 阅读 · 1 评论 -
c++的四种强制转化
1 reinterpret_cast'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。如果情况是从一个指针到整型的拷贝,内容的解释是系统相关原创 2017-10-12 20:02:36 · 272 阅读 · 0 评论 -
new和new[] 和delete 和delete[]
今天无意中提起这个东西虽然在学习时也遇到过但是还是整理整理首先对于一般的而言malloc 和free对应new 和delete对应具体而言前者是c语言的内存管里方法后者是c++的管理方法。前者分配失败返回的是NULL 后者是一个抛出异常,所以不能直接用空去判断是否分陪成功;说道这儿接下来是今天的主题new和new[] delete 和delete[]首先看一个代码clas原创 2017-11-12 18:55:38 · 670 阅读 · 0 评论 -
函数调用
1.当参数个数多于一个时,按照什么顺序把参数压入堆栈2.函数调用后,由谁来清理形参的内存3. 函数产生的符号名字不同 在高级语言中,通过函数调用约定来说明这两个问题__cdecl: 调用方开辟内存,调用方释放形参内存__stdcall: 调用方开辟内存, 被调用方自己释放形参内存__fastcall: 调用方开辟内存,但是把最左边(也就是最后8字节的实原创 2018-01-25 00:14:14 · 193 阅读 · 0 评论 -
类模板和函数模板的使用
原创 2017-06-21 13:47:48 · 285 阅读 · 0 评论 -
map表的一些用法
//基本函数用法和常用容器方法检测#include #include #include #include #include #include using namespace std;int main(){coutcoutmap a;FILE *fr=fopen("d:\\1.txt","r");assert(fr!=NULL);char原创 2017-06-20 21:35:00 · 2157 阅读 · 0 评论 -
类和对象
如何创建一个对象来反应现实世界 首先将现实世界进行抽象,(属性和行为)得到ADT 然后抽象数据类型可以用类来表示对象是类的实现现实世界抽象出多个类他们之间的关系(对象的交互)是组合继承代理c++中的命名规范类名第一个字母大写第一个全小写其他的都大写方法名 方法小写后面的都大写srtruct class 的区别多了访问限定符 public private原创 2017-05-10 22:29:25 · 870 阅读 · 1 评论 -
函数模版和类模版
函数模版模版的实例化模版的函数模版类形参模版类非形参模版实例化模版的特例化定义模版函数的参数的列表template//尽量不要写class 防止和类混淆bool compare(t a , t b){...}使用函数模版的方法compare(a,b)函数模版实例化为模版函数不过如何使用每次通过不同类型的模版函数都会在代码里生成新的一份。(原创 2017-05-22 22:33:19 · 201 阅读 · 0 评论 -
函数在c++中的区别
c和c++的有inline c在c99中添加了inline函数但是inline函数作用更安全的宏在调用点展开没有栈针的会退一些函数不能采用inline 如递归对次数 未知或者可变参对于参数个数未知函数重载的条函数名相同 参数类型不同(不能根据返回值去判断函数是否重载)函数重载的选择一般会选择离自己作用域想相同的地方如果没有再去全局去找;c++多态静多态和动多原创 2017-05-08 15:15:27 · 246 阅读 · 0 评论 -
拷贝构造与赋值运算符重载(顺序)
other->l类类型 :找到合适的构造函数生成该类的对象(如果找不到实例化对象失败)隐式调用构造函数 显示调用函数(无名对象(零时对象))赋值运算符重载函数分为3步第一步 判断是不是自身赋值(防止失败出错)第二步 释放this指针所指的(外部)空间的大小第三步重新分配空间 拷贝数据;对象的生存周期全局对象和静态对象的生存周期最长临时变量的生存周期只在该条语句结原创 2017-05-13 22:45:07 · 457 阅读 · 0 评论 -
c++(函数返回值的及其优化)
如果返回的是个对象 那么 在调用该函数的时候先由主函数开辟内存然后当做参数将该地址存进去。如果参数为对象然后调用的时候将tmp拷贝构造给那个空间。(造成大量的析构和构造函数)解决方法首先啊参数尽量是引用;减少形参的构造和引用第二点如果返回对象尽量返回临时对象(因为当return的时候直接构造零时变量在main中减少了临时变量的生成)如果使用的是初始化拷贝构造 返回的是临时变量原创 2017-05-15 22:33:11 · 409 阅读 · 0 评论 -
文件的操作
open返回一个文件描述符int open(const char *path ,int flage)int open(const char *path , int flags,mode _t mode);可以自定义打开形式例如(O_WRONLY|O_CREAT,0600(权限问题))第三个参数是因为无文件时创建产生的权限问题方read()write()(linux程序设计)#原创 2017-05-08 14:25:24 · 233 阅读 · 0 评论 -
临界资源和临界区
临界资源多个进程访问同一资源只能让一个进程去处理多个需要访问临界资源的代码信号量是用来同步进程的只能做原子+1v 原子-1p原子操作不能打断的操作如果两个进程都需要访问临界资源时对进程进行控制。通过信号量进行控制、信号量是一个大于0的值 进程间需要同步解决两个进程都要访问的临界资源0.1叫做二值信号量(90%)3 计数信号量、p操作代表阻塞每次原创 2017-05-08 14:13:33 · 611 阅读 · 0 评论 -
const 和二级指针的使用
#include inline int add(int x,int y);int main(){ int a=10; int *p=&a; const int * *q=&p;//这一行错误 不能将int **转换为 const ** 原因 **q不能被改变 *q-p *q为const int * *q *q只能放个整形常量地址。p是变量地址;不能直接复制; re原创 2017-05-08 23:49:30 · 1322 阅读 · 0 评论 -
类模板(二)
如果一个类实例话为int类型的类南无就不能用它去处理一个其他啊类型的数据;一个类模板中的系统可以提供的默认函数都不能被类模板中的模板函数代替,如果删除原有函数,系统会默认提供函数为什么要给拷贝构造函数提供模板为了用其他的类来初始化普通的成员方法可以被模板所替代(因为编译器不会自动提供)class link{ public: link(); link(const原创 2017-05-30 22:22:29 · 206 阅读 · 0 评论 -
c++智能指针整理
std::auto_ptr这是一种简单的智能指针auto_ptr是C++标准库中(<utility>)为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。主要用法分为三类用法一: std::auto_ptr<MyC...原创 2018-03-01 15:34:16 · 191 阅读 · 0 评论