![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 61
木槿花better
这个作者很懒,什么都没留下…
展开
-
C++细节 C++中的malloc/free ,new/delete
首先,malloc/free 是函数,new/delete是一个操作符下面看一下malloc,free,realloc函数原型 (引用自C++ reference)malloc/free ,calloc,realloc mallocvoid* malloc (size_t size);Allocate memory blockAllocates a block of...原创 2018-07-28 19:13:58 · 2005 阅读 · 0 评论 -
单例模式
转自:https://www.cnblogs.com/qiaoconglovelife/p/5851163.html饿汉本身线程安全。class singleton{protected: singleton() {}private: static singleton* p;public: static singleton* initance();...转载 2019-03-17 16:36:50 · 124 阅读 · 0 评论 -
C++从类型萃取到特化
类型萃取,字面理解(type traits)#include<iostream>using namespace std;template<class T>class A{public: A() :a(0) { cout << "初始的模板" << endl; } T a;};template<>...原创 2019-03-12 00:54:04 · 331 阅读 · 0 评论 -
派生类的拷贝构造问题
《Effective C++》中条款5到条款12是在讲述类中默认函数的一些书写“坑”,我总结一下,依照更为简便的Demo进行一个概括,并使用C++11的一些语法糖和新特性,更加容易的表现出这个注意事项。贴一个简洁代码,可以直接下去看结论#include<iostream>using namespace std;namespace D { class Base { pu...原创 2019-03-20 12:47:21 · 958 阅读 · 1 评论 -
STL:快速排序和三数取中
自己写一个快速排序,原理网上也很多。STL 的sort比较好用,会自动判断使用heap sort或者Intro quick sort(类似三数取中法快排)。 int quickSortPart(int a[],int left,int right) { int temp = a[right]; while (left<right) { while (left&l...原创 2019-03-19 20:08:57 · 891 阅读 · 0 评论 -
STL:priority_queue和heap笔记
heap数据结构,图和原理网上很多。我的一个堆排序,这是堆思想的一个应用。 void adjustHeap(int a[], int i, int size) { //int max; int l = 2 * i + 1; int r = 2 * i + 2; int max = i; //vs 2017 会检测&&右边的,故不能将l < si...原创 2019-03-19 19:52:35 · 382 阅读 · 0 评论 -
STL:序列式容器deque笔记
deque无容量概念,动态分段,deque的结构稍显复杂不过也可以很好概括,一块map,每个元素(node)存储指针,指向一段buffer(缓冲区),缓冲器自然不是连续的,但是由于映射(map上指针指向空间)类似hash,可以视作逻辑上的连续,类似list的逻辑上连续。P.J. Plauger版本的deque我没看,侯捷描绘的SGI版本deque图如下实现比较繁琐,明白数据结构和...原创 2019-03-19 19:42:15 · 244 阅读 · 0 评论 -
STL:序列式容器list笔记
前文中vector的迭代器就是指针,list的迭代器稍微不一样,list是循环双向带头结点的链表,平时自己操作单链表还是使用自己forward_list或者自己写一个list吧。先说使用,再说数据结构。文档在这http://www.cplusplus.com/reference/list/list/1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动2. rbe...原创 2019-03-19 19:21:01 · 233 阅读 · 0 评论 -
STL:序列式容器vector笔记
vector的构造,C++98中的四种构造default (1) explicit vector (const allocator_type& alloc = allocator_type()); fill (2) explicit vector (size_type n, const value_type& val = va...原创 2019-03-19 19:00:20 · 224 阅读 · 0 评论 -
智能指针的使用和原理
不多说一个Demo上来void other(shared_ptr<vector<int>>& smart_p2){ shared_ptr<vector<int>>smart_p4 = smart_p2;//赋值重载 printf("1,2,3,4数组的引用计数是%d\n", smart_p2.use_count());}voi...原创 2019-03-18 20:09:03 · 509 阅读 · 0 评论 -
STL: unordered_map 自定义键值类型的使用
当试图使用自定义类型作为 unordered_map 的键值时,则必须为自定义类型定义 Hash 函数与相等的判断条件。我们先定义自定义类型作键值,代码如下:struct KEY{ int first; int second; int third; KEY(int f, int s, int t) : first(f), second(s), third(...转载 2019-04-12 20:34:24 · 1406 阅读 · 0 评论 -
Linux:守护进程和http服务器
守护进程什么是守护进程?《UNIX环境高级编程》指出属于生存期长的一种进程,系统级别就有许多进程进行内核级别操作或者交互操作需要设置为守护进程,暂且不论。如果我们意图使服务器一直运行,则需要我们的守护进程客户进程-服务器进程模型,在服务器模型中,fork然后exec一个程序来向客户服务是常见的行为,这样我们的守护进程可以让守护进程的子进程打开文件描述符(fork时会继承父进程(守...原创 2019-06-24 22:38:52 · 728 阅读 · 0 评论 -
epoll学习笔记
pollpoll 对比select 没有监控的文件描述符上限采用事件结构信息进行描述符监控,简化了三种描述符的操作流程但是poll依然需要将事件结构信息拷贝到内核进行监控在内核中需要轮询遍历的方式进行描述符事件监控(随着描述符增多而性能降低)poll也不会告诉用户具体哪个描述符就绪,需要遍历判断revents来决定描述符应该进行何种操作epollint epoll_create(in...原创 2019-07-03 08:23:21 · 462 阅读 · 1 评论 -
回调函数复习
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。之前在#include <stdio.h>typedef int(*mypoint)(int);sta...原创 2019-06-24 09:48:39 · 379 阅读 · 0 评论 -
CPP运算符优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[整型表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 ...原创 2019-05-29 22:29:32 · 3462 阅读 · 1 评论 -
传递对象和传递指针(是否产生多态)
今天碰到一个例子,这样则是常见的多态行为,一个接口,多种实现。class A {public: virtual void fun() { cout << "1" << endl; }};class B:public A {public: virtual void fun() { cout << "子类" << endl...原创 2019-05-23 20:56:13 · 519 阅读 · 0 评论 -
VirtualAlloc的使用
在应用程序中使用虚拟内存(VirtualAlloc VirtualFree)本文转载以下博客,百度百科,cpp文档https://blog.csdn.net/baidu_25539425/article/details/78764156https://blog.csdn.net/u012372584/article/details/79621538https://www.cnblo...原创 2019-05-23 20:06:12 · 11257 阅读 · 0 评论 -
C++重载细究
首先,重载只和“参数”“const”有关。和返回值无关。static在重载函数中无法重载,报错,但如果只有一个static int name(a,b,c)是可以的。const在重载中const修饰变量其次,如果是简单如const int和int直接不能构成重载,因为函数传参过程无法确定const int和int但是 char * a和const char*...原创 2019-05-26 00:10:35 · 303 阅读 · 0 评论 -
排序2:自定义数据的排序(仿函数和lambda)
利用仿函数和泛型编程完成自定义数据的排序template<class T=vector<PAIR>,class K>void mysort(T & num,const K &cmp){ int size = num.size(); for (int i = 0; i <= size-2; i++) { for (int j = 0;...原创 2019-05-11 21:54:18 · 1012 阅读 · 0 评论 -
两数相加和mylist(单链表)
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...原创 2019-03-10 00:42:48 · 360 阅读 · 0 评论 -
C语言字符串问题
有人问我char* 和char[]存储字符串有什么区别,我讲了半天他没懂,还是回宿舍敲一个Demo示例吧,看图一眼便能明晰,顺便看了看网上的,说的杂七杂八,不如这样简洁明了, 3条注释说明其不同性质,下面贴出代码和注释。const char* s1 = "123"; const char* s2 = "123";//s1,s2指针存储的地址相同,指向常量区的"123" char s3...原创 2019-03-05 12:43:19 · 420 阅读 · 1 评论 -
不使用数学公式,循环,判断语句实现等差数列求和(C++内部类(嵌套类实现))
求1+2+3+4+5.....+n但是不使用判断,循环#include <iostream>class subject{public : class Sum { public: Sum() { sum +=i; ++i; } };public : int sum_Solution (int const n) { Sum*p=ne...原创 2018-10-28 15:44:43 · 1433 阅读 · 2 评论 -
大小端判断代码(联合)
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。这是大小端的定义https://mp.csdn.net/postedit/81782305文中写到了联合的概念,我翻阅书籍时,查到一种巧妙地方式,这种感觉就像我第一次看《编程珠玑》时...原创 2018-10-09 18:45:39 · 487 阅读 · 0 评论 -
C++数组和指针,多维数组
数组不是指针,数组名的值是一个指针常量。依据《c和指针》《c专家编程》上的例子,来总结一下。int array[10];int *ap =array + 2;然后会有以下例子:在c/c++中,array[2],2[array]是一样的,源自于同样的 *(array +2)的指针形式写法 多维数组(从二维数组说起)*(*(p+i)+j)//是p[i][...原创 2018-10-13 10:50:36 · 706 阅读 · 0 评论 -
C++传引用和传值,传指针
我们需要传数据而不改变数据存储,直接传值,如int a;我们需要传数据,并且改变值大小,需要传地址,如 int * pa;我们需要传数据,并改变数结构中指针的指向,需要传二级指针,如链表中的 node * * l;...这是c语言中传值的形式。参考我之前的一篇文章https://blog.csdn.net/weixin_41143631/article/details/82717...原创 2018-10-12 18:53:19 · 2785 阅读 · 1 评论 -
C/C++结构体字节对齐详解
前提:为了访问速度和效率,需要各种类型数据按照一定的规则在空间上排列;不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。为了访问未对⻬的内存,处理器需要作两次内存访问;⽽对⻬的内存访问仅需要⼀次访问。于是有了字节对齐,4个字节是一个自然对齐为什么是4个字节?32位机,即计算机数据总线宽度为32个,一次可以处...原创 2018-08-17 19:06:05 · 3654 阅读 · 0 评论 -
C++细节 深拷贝和浅拷贝(位拷贝)详解
前提 在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数。阅读《高质量的c c++编程》,第9章有这样一段话,类似的话在《c++primer》《effective C++》都有所提及,那就是拷贝构造函数问题,这个是类编写者的一个基础问题。位拷贝(浅...原创 2018-08-07 21:00:14 · 53442 阅读 · 7 评论 -
C++细节合成析构函数问题(synthesized destructor)
开门见山,前提知识点析构函数体自身并不直接销毁成员,是在函数体之后隐含的析构阶段中被销毁的 《c++primer》第五版13章中提及的“合成析构函数”,原文中 当1个类未定义自己的析构函数时,编译器会为它定义一个合成析构函数(synthesized destructor)。类似拷贝构造函数和拷贝赋值函数运算符,对于某些类,合成析构函数被用来阻止该类型的对象被销毁。而csdn...原创 2018-08-01 18:57:43 · 1332 阅读 · 0 评论 -
C++细节 输出运算符的重载为什么不写成类的成员函数
打印类中的一些变量,此时就需要使用函数或者重载,为了提高代码可读性,一般使用操作符重载来书写,而cout并不在c++的默认类成员函数中,需要我们自己书写。第一种写在类中如下面的代码(我们以日期类举例,较《c++primer》中的书店类更加容易讲解做笔记)对输出运算符的重载 void operator<<(ostream& out) { out <&l...原创 2018-07-27 21:16:24 · 4803 阅读 · 4 评论 -
类和对象(java和C++纲要总结)
阅读《C++primer》和 看java的视频,图书馆的各类,总结一下。使用 C++的类机制用户能够定义自己的数据类型, 因此 ,类经常被称为用户定义的 类型 user-defined type, UDT 通过类 我们可以向一个已有的类型添加功能 面向对象三大特性(1)封装:保护内部的操作不被破坏; (2)继承:在原本的基础之上继续进行扩充; (3)多态:在一个指定的范围之内...原创 2018-10-26 22:01:38 · 852 阅读 · 0 评论 -
C++类模板实践(二叉树类)1
先贴上我代码(未成品,我就先写了构造和析构,先序遍历代码),需要用的人可以直接用。造轮子方便我去了解STL,了解代码。我写代码时踩过的一些小坑,作为一些小知识:发生了几个语法,编译,链接bug。第一个:模板的typedef,得声明类型:typedef BinaryTreeNode<T> Node;第二个:struct BInaryTreeNode,构造时采用匿名...原创 2018-11-11 17:47:08 · 761 阅读 · 0 评论 -
_declspec(thread)变量
thread 用于声明一个线程本地变量. __declspec(thread)的前缀是Microsoft添加给Visual C++编译器的一个修改符。它告诉编译器,对应的变量应该放入可执行文件或DLL文件中它的自己的节中。__declspec(thread)后面的变量 必须声明为函数中(或函数外)的一个全局变量或静态变量。不能声明一个类型为__declspec(thread)的局部变量。e.g...转载 2019-02-20 16:51:56 · 4183 阅读 · 1 评论 -
const的使用
class Test{public:Test();~Test();int num;int fun();int fun(int b) const;int fun(int b);};Test::Test(){cout << "Test()" << endl;}Test::~Test(){}int Test::fun(){cout <...转载 2019-02-20 14:27:38 · 140 阅读 · 0 评论 -
值语义
所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响。在C++中使用拷贝构造和赋值。 值语义(value sematics)指的是对象的拷贝与原对象无关,就像拷贝 int 一样。C++ 的内置类型(bool/int/double/char)都是值语义,标准库里的 complex<> 、pair<>、vector&l...转载 2019-02-19 15:10:09 · 1016 阅读 · 0 评论 -
static性质
总结一下static在C/C++中的作用。https://blog.csdn.net/weixin_41143631/article/details/81221512参考我的这篇笔记。static 变量 未初始化就放在 BSS segment ,已初始化的 就放在 Data segment,但可以认为BSS或Data段都是静态区。C++中可以认为是一块区域。明白一个变量的存储区域便...原创 2019-02-18 22:57:34 · 302 阅读 · 0 评论 -
C++迭代器的操作
迭代器操作 说明(1)所有迭代器p++ 后置自增迭代器++p 前置自增迭代器(2)输入迭代器*p 复引用迭代器,作为右值p=p1 ...转载 2019-02-13 10:20:16 · 467 阅读 · 0 评论 -
C++:从尾置返回类型引出lambda表达式
本文参考《C++primer》和个人使用尾置返回类型int (*func(int i))[10] 是一个函数的声明func(int i) 表明func有一个int的参数(*func(int i)) 表明 我们可以用函数调用执行解引用(*func(int i))[10] 表明 解引用 func的调用得到大小为10的数组前面的int表明数组里面都是int 在C++1...原创 2019-02-22 20:57:49 · 1687 阅读 · 0 评论 -
STL:unordered_map使用笔记
The swap functions do not invalidate any of the iterators inside the container, but they do invalidate the iterator marking the end of the swap region. References and pointers to either key or data st...原创 2019-02-22 00:22:21 · 567 阅读 · 0 评论 -
多态(Vptr指针与虚函数表)
本笔记主要记录运行时多态——虚函数实现。如下,代码可以先略过直接看下面结论。多态:根据实际的对象类型决定函数调用语句的具体调用目标typedef void(*VFUNC)(void);/*typedef void (*)() VE;int arr[i] int []*/void PrintTable(VFUNC table[])//VFUNC * table...原创 2019-02-15 18:19:24 · 543 阅读 · 0 评论 -
http头部常见信息
准备写一个http类型的服务器,基于应用层,知识查看于https://www.php.cn/manual/view/35624.htmlETagHTTP 响应报头为资源的特定版本的标识符。它允许缓存更高效,并节省带宽,因为如果内容没有改变,Web 服务器不需要发送完整的响应。另一方面,如果内容发生了变化,etags 有助于防止资源的同时更新互相覆盖(“空中冲突”)。如果给定 URL...原创 2019-07-21 10:55:34 · 497 阅读 · 0 评论