![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
「已注销」
这个作者很懒,什么都没留下…
展开
-
宏定义中##和#的作用
##是一个连接符号,用于把参数连在一起#define FOO(arg) my##argint myxy =3;cout<<FOO(xy);//输出3注意:如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开 。#是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串 #define STRCPY(dst...原创 2019-08-07 16:46:31 · 199 阅读 · 0 评论 -
STL学习(21):容器适配器
容器适配器不是二级容器,它可以在一级容器的基础上再次封装如:queue<string, deque<string> > t; //在双端队列上封装stack<int, vector<int> > s; //在vector上封装适配器并不是第一类容器,因为它们并没有提供与元素的保存形式有关的真正数据结构实现,并且适配器...原创 2019-07-02 18:05:55 · 320 阅读 · 0 评论 -
STL学习(19):排序及相关操作
排序 第n个元素 二分检索 归并 序结构上的集合操作 堆操作 最大和最小 词典比较 排列生成器 数值算法 自定义STL函数主要函数如下所示。 序号 功能 函数名称 说明 1 排序 Sort 以很好的平均效率排序 ...原创 2019-06-24 13:11:25 · 192 阅读 · 0 评论 -
STL学习(18):变异算法
复制 交换 变换 替换 填充 生成 删除 唯一 反转 环移 随机 划分变异算法,即变异函数的主要特点是修改容器中的元素。如修改容器中的元素值,改变容器中的元素序列等。按照功能划分如下所示 序号 功能 函数名称 说明 1 复制 copy:...原创 2019-06-24 13:00:44 · 525 阅读 · 0 评论 -
STL学习(17):非变异算法
循环 查询 计数 比较非变异算法主要包含以下函数 序号 功能 函数名称 说明 1 循环 for_each 遍历容器元素,对每元素执行相同的操作 2 查询 find ...原创 2019-06-24 11:01:16 · 256 阅读 · 0 评论 -
STL学习(16):map映射
常用的映射类是map, multimap。在前述的各个容器中,仅保存着一样东西,但是在映射中将会得到两样东西:关键字以及作为对关键字进行查询得到的结果值,即一对值<Key, Value>。map单映射中Key与Value是一对一的关系,multimap多映射中Key与Value可以是一对多的关系。map也是有不能存储的数据只要该数据不能够互相比较大小那么就不能使用map存储.那...原创 2019-06-24 10:52:25 · 259 阅读 · 0 评论 -
STL学习(15):set集合
set 、multiset都是集合类,差别在于set中部允许有重复元素,multiset中允许有重复元素。常用函数//(1)构造函数set(const Pred& comp = Pred(), const A& al = A()); //创建空集合set(const set& x); ...原创 2019-06-24 10:46:37 · 242 阅读 · 0 评论 -
STL学习(14):bitset容器(位图)
因为C是一种“接近硬件”的语言,但C语言并没有固定的二进制表示法。BitSet可以看作是二进制位的容器,并提供了位的相关操作函数。//(1)构造、赋值函数bitset();bitset(const bitset&) ;//拷贝构造函数bitset(unsigned long val) ;//由无符号长整形数构建位容器bitset(const string& str,...原创 2019-06-24 10:39:09 · 337 阅读 · 0 评论 -
STL学习(13):容器
容器分类(1)序列性容器:按照线性排列来存储某类型值的集合,每个元素都有自己特有的位置,顺序容器主要有vector、deque、list。(2)关联式容器:与前面讲到的顺序容器相比,关联容器更注重快速和高效地检索数据的能力。这些容器是根据键值(key)来检索数据的,键可以是值也可以是容器中的某一成员。这一类中的成员在初始化后都是按一定顺序排好序的。关联式容器主要有set、mu...原创 2019-06-24 09:27:48 · 110 阅读 · 0 评论 -
STL学习(12):函数对象
为何引入函数对象即在函数中调用所需类对象的函数,使程序结构同时显得非常简洁 。函数对象是重载了operator()的类的一个实例,operator()是函数调用运算符。标准C++库根据operator()参数个数为0个,1个,2个加以划分的。主要有以下3种类型:发生器:一种没有参数且返回一个任意类型值的函数对象,例如随机数发生器。 一元函数:一种只有一个任意类型的参数,且返...原创 2019-06-23 20:31:01 · 372 阅读 · 0 评论 -
C++模板全特化和偏特化
模板特化,任何针对模板参数进一步进行条件限制设计的特化版本。《泛型思维》全特化就是全部特化,即针对所有的模板参数进行特化。《c++ primer》偏特化就是部分特化,即针对部分模板参数进行特化。《c++ primer》全特化和偏特化的定义不是很严格,所以有的时候不容易让人理解。全特化#include <iostream>using namespace std;...原创 2019-07-03 11:09:21 · 199 阅读 · 0 评论 -
C++类型萃取(traits)技术
STL简述STL(Standard Template Library)是C++泛型编程(template技术)的集大成者, 迭代器在STL中发挥重要的作用. 在STL中有3个重要的概念:容器:包括顺序容器(vector, list)和关联容器(map, set) 算法:各种操作容器的函数模版(count, count_if) 迭代器:作为算法和容器的桥梁, 让算法独立于容器发展...原创 2019-07-03 16:00:41 · 2205 阅读 · 0 评论 -
C++智能指针
什么是智能指针?智能指针的原理将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并 在析构函数里编写delete语句删除指针指向的内存空间。智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智 能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放,智能指针就是一种栈上创建的对象,函数退出时会调用其析构函数,这个析构...原创 2019-08-02 14:19:32 · 163 阅读 · 0 评论 -
C语言运算符优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 ...原创 2019-08-06 16:21:42 · 128 阅读 · 0 评论 -
STL个各个容器的内部实现
vector连续空间(像数组一样),只能向尾端插入,空间可以增长,空间增长是一个非常好性能的事增长三部曲:另觅更大空间 将原数据复制过去 释放原空间三部曲list环形双向链表dequedeque空间是分段连续,给人造成一种连续的假象,每一个元素都是指针,指向另外一段真正连续的空间(称作缓冲区),缓冲区才是真正存放数据的地方,因为他是分段连续的...原创 2019-08-13 14:25:11 · 584 阅读 · 0 评论 -
C语言位段
有时,存储1个信息不必占用1个字节,只需二进制的1个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。位段的概念与定义所谓位段类型, 是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。例如,CPU的状态寄存器,按位段类型定义如下:struct status{ unsigned sign:1;/*...原创 2019-08-01 20:01:02 · 369 阅读 · 0 评论 -
setjmp()和longjmp()
C 标准库 -<setjmp.h>setjmp.h头文件定义了宏setjmp() 函数longjmp() 变量类型jmp_bufjmp_buf该变量类型会绕过正常的函数调用和返回规则。jmp_buf这是一个用于存储宏setjmp()和函数longjmp()相关信息的数组类型。宏int setjmp(jmp_buf environm...原创 2019-08-07 22:57:34 · 242 阅读 · 0 评论 -
C语言字符串初始化关于数字
先判断下面的代码: char str1[] = "\0123"; printf("size = %d\n", sizeof(str1));可能你会大声的说出:5有可能你的理由是:第一个:\第二个:0第三个:1第四个:2第五个:3还有可能你的理由是:第一个:\0第二个:1第三个:2第四个:3第五个:\0如果你的理由是最上面那个,那么你应...原创 2019-08-05 14:53:28 · 547 阅读 · 0 评论 -
C语言标准库函数qsort
qsort 函数包含在<stdlib.h>的头文件里。qsort 函数声明如下:void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));参数说明如下:base: 要排序的数组 nmemb: 数组中的元素数目 size: ...原创 2019-07-22 08:21:00 · 268 阅读 · 0 评论 -
C++错误总结
在Linux上编译出现undefined reference to `std::cout'gcc 后面要加 -lstdc++ 或者用g++原创 2019-07-01 10:27:20 · 159 阅读 · 0 评论 -
STL学习(20):自己常用的功能总结
变异算法对一个容器进行逆序vector<int> ret_arr;reverse(ret_arr.begin(), ret_arr.end());原创 2019-07-01 07:23:01 · 168 阅读 · 0 评论 -
STL学习(11):输入输出流
标准输入输出流 文件输入输出流 字符串输入输出流标准输入输出流即标准输入流cin、标准输出流cout。前者指键盘,后者指显示器。1插入符与提取符在输入输出流类库中,重载了两种运算符以简化输入输出流的使用,运算符<<常用做输入输出流的插入符,表明“输出到”,例如cout << “Hello”是把字符串“Hello”输出到屏幕上;运算符>>常用...原创 2019-06-23 19:14:10 · 427 阅读 · 0 评论 -
STL学习(10):迭代器
迭代器即是指针,可以是所需要的任意类型,它的最大的好处是可以使容器和算法分离开来。常规思维是每个容器类中有自己的显示、查寻、排序等函数。仔细分析可得出:不同容器中完成相同功能代码的思路大体是相同的,那么能不能把它们抽象出来,多个容器仅对应一个显示、一个查询、一个排序函数 呢?这是泛型思维发展的必然结果。STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数...原创 2019-06-23 17:08:36 · 281 阅读 · 0 评论 -
STL学习(6):queue
STL学习网址:C语言中文网:http://c.biancheng.net/stl/STL中的queue队列容器队列是一种数据结构,具备队头和队尾。常见的有FIFO(先入先出)队列等。常用函数//(1)构造函数queue(class T, class Container=deque<T>);//创建元素类型为T的空队列,默认容器是 dequest...原创 2019-05-22 07:58:47 · 139 阅读 · 0 评论 -
STL学习(5):stack
STL学习网址:C语言中文网:http://c.biancheng.net/stl/在数据结构中,栈是一种先入后出的容器,增加元素叫压栈或者入栈。移除元素通常叫做出栈。STL提供的stack容器,也是这种基本类型。这里我们演示一下基本元素类型和复杂元素类型。stack<int> s; s.push(x)无返回值,将元素x压栈 s.pop();...原创 2019-05-22 07:57:24 · 180 阅读 · 0 评论 -
STL学习(4):deque双端容器
STL学习网址:C语言中文网:http://c.biancheng.net/stl/deque容器为一个给定类型的元素进行线性处理,就如向量,它能够快速地随机进入任一个元素,并且能够高效地插入和删除容器的尾部元素。但它与vector不同,deque能支持高效插入和删除容器的头部元素,也叫做双端队列。常用函数push_back从尾部插入元素 push_front从头部插入元素 ...原创 2019-05-22 07:56:13 · 152 阅读 · 0 评论 -
STL学习(3):vector
STL学习网址:C语言中文网:http://c.biancheng.net/stl/vector是将元素放到动态数组中加以管理的容器。vector容器可以随机存取元素,也就是说支持[]运算符和at方式存取。vector在尾部添加或者移除元素非常快,在中间操作非常耗时,因为它需要移动元素vector的基本用法既然vector是容器,那么就可以向这个容器添加删除元素。基本用法:...原创 2019-05-22 07:54:44 · 226 阅读 · 0 评论 -
STL学习(2):string
STL学习网址:C语言中文网:http://c.biancheng.net/stl/ https://www.jianshu.com/p/497843e403b4STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数模板的机制,由三大部分组成:容器、算法和迭代器。目前STL有六大组件容器 container 算法 algorthm 迭代器 ...原创 2019-05-21 21:04:27 · 205 阅读 · 0 评论 -
main 函数执行前后会执行什么代码?
main函数执行前:设置栈指针 初始化static静态和global全局变量,即data段的内容 将未初始化部分的全局变量赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容 运行全局构造器,估计是C++中构造函数之类的吧 将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数main函数执...原创 2019-05-20 08:40:01 · 1149 阅读 · 0 评论 -
STL学习(1):概述
STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数模板的机制,由三大部分组成:容器、算法和迭代器。 目前STL有六大组件容器 container 算法 algorthm 迭代器 iterator 仿函数 function obje...原创 2019-05-19 19:43:32 · 188 阅读 · 0 评论 -
面向对象三大特性五大原则 + 低耦合高内聚
面向对象的三大特性:"封装 "多态" "继承"五大原则:"单一职责原则" "开放封闭原则" "里氏替换原则" "依赖倒置原则" "接口分离原则"什么是面向对象面向对象是一种对现实世界理解和抽象的方法。三大基本特性:封装,继承,多态封装封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。一个类就...原创 2019-05-06 09:35:10 · 174 阅读 · 0 评论 -
C++多态性
前几天在网上看到这样的一个问题:多态现在一般的用法,就是拿一个父类的指针去调用子类中被重写的方法。但我搞不懂为什么要那么做,我们直接在子类中写一个同名的成员函数,从而隐藏父类的函数不就行了么?然后有人这样回答:将父类比喻为电脑的外设接口,子类比喻为外设,现在我有移动硬盘、U盘以及MP3,它们3个都是可以作为存储但是也各不相同。如果我在写驱动的时候,我用个父类表示外设接口,然后在子类中...原创 2019-04-30 08:59:41 · 271 阅读 · 0 评论 -
STL学习(7):list
STL学习网址:C语言中文网:http://c.biancheng.net/stl/list容器具有如下特性:可以在头部和尾部插入和删除元素 不能随机访问元素,也就是迭代器只能只能++,不能一次性跳转相对于vector的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素,就配置或释放一个元素空间。也就是...原创 2019-05-22 08:07:03 · 208 阅读 · 0 评论 -
STL学习(8):sort排序
STL学习网址:C语言中文网:http://c.biancheng.net/stl/在很多应用中,排序都是至关重要的,而且很多STL算法也只适用于有序对象序列。定义在 algorithm 头文件中的函数模板 sort<Iter>() 默认会将元素段排成升序,这也就意味着排序的对象的类型需要支持<运算符。对象也必须是可交换的,这说明可以用定义在 utilit...原创 2019-05-22 08:11:19 · 191 阅读 · 0 评论 -
C++进阶(1):
位运算符#define and &&#define and_eq &=#define bitand &#define bitor | #define compl ~ #define not !#define not_eq !=#define or |#define or_eq |=#define xor ^ ...原创 2019-06-23 11:12:13 · 287 阅读 · 0 评论 -
C++的布局new操作符
传统的new操作符只能在动态内存中得到空间,如果我们想要重一个静态内存中得到一个空间,该怎么做呢?就用布局new操作符#include <iostream>#include <new>using namespace std;int main(){ char buffer[10]; char *p = new (buffer) char[sizeof(b...原创 2019-06-26 10:57:29 · 632 阅读 · 0 评论 -
准确的延时函数
CLOCKS_PER_SEC:表示每秒钟包含多少个时钟单位clock():表示当前时钟数#include <iostream>#include <ctime>using namespace std;void print_time(void);time_t timep;int main(){ clock_t delay = 10 * CLOCK...原创 2019-06-26 10:21:32 · 451 阅读 · 0 评论 -
malloc分配二维数组
第一种:int row = 64;int cloumn = 64;char **a = (char **)malloc(sizeof(char *) * row);for (i = 0; i < row; ++i) { a[i] = (char *)malloc(sizeof(char) * cloumn);}第二种:int (*a)[2] = malloc(...原创 2019-06-11 08:05:05 · 1706 阅读 · 0 评论 -
怎样给一个最小数初始化?
有时候我们在求最小值的时候,需要给该最小值变量初始化,但是怎么初始化最好呢?有很多人可能会初始化为:0x7FFF FFFF也许再某些情况下这是最好的,但是如果我们要在这个最小值上做运算怎么办?如:0x7FFF FFFF + 2 = — 1;这样就会把最小值变为负数,那怎样才好呢?用0x3F3F 3F3F,他和0x7FFF FFFF是一个数量级的,而且还有一种意想不到的效果?就是...原创 2019-05-31 21:14:10 · 425 阅读 · 0 评论 -
STL学习(9):STL二维数组的使用
创建第一种: vector< vector<int> > my_list1(5); //定义第一维 for (int i = 0; i != my_list1.size(); i++) { my_list1[i].resize(3); //定义第二维 }第二种:vector< vector<int...原创 2019-05-23 15:37:27 · 1567 阅读 · 0 评论