![](https://img-blog.csdnimg.cn/20190328082028991.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
C++知识归纳总结
轻舞飞扬SR
视频压缩,视频编码,图像处理,图像压缩
展开
-
STL学习笔记(16)常用STL算法
算法主要是由头文件 #include <algorithm.h> 组成。 其中常用的功能涉及到比较,交换,查找,遍历,复制,修改,反转,排序,合并等。 常用遍历算法 for_each /* 遍历算法 遍历容器元素 @param beg 开始迭代器 @param end 结束迭代器 @param _callback 函数回调或者函数对象 @return 函数对象 */ for_each(iterator beg, iterator end, _callback)原创 2021-07-02 17:39:36 · 416 阅读 · 0 评论 -
STL学习笔记(15)函数对象适配器
函数适配器 bind1st bind2nd 现在有这么个需求,在遍历容器的时候,希望将容器中的值全部加上 100 之后显示出来,怎么做? 我们直接给函数对象绑定参数 编译阶段就会报错 for_each(v.begin(), v.end(), bind2nd(myprint(),100)); 如果我们想使用绑定适配器,需要我们自己的函数对象继承 binary_function 或者 unary_function,根据我们函数对象是一元函数对象,还是二元函数对象来决定绑定哪个。 class MyPrint :原创 2021-07-02 15:35:17 · 195 阅读 · 0 评论 -
STL学习笔记(14)内建函数对象
STL内建函数对象 STL 内建了一些函数对象。分为:算数类函数对象,关系运算类函数对象,逻辑运算类仿函数。这些仿函数所产生的 对象,用法和一般函数完全相同,当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象,需 要引入头文件 #include。 6 个算数类函数对象,除了 negate 是一元运算,其他都是二元运算。 template<class T> T plus<T>//加法仿函数 template<class T> T minus<T>原创 2021-07-02 14:43:12 · 96 阅读 · 0 评论 -
STL学习笔记(13)谓词
谓词 谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数)。如果 operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断式。 class GreaterThenFive { public: bool operator()(int num) { return num > 5; } }; //一元谓词 void test01() { vector<int> v; for (int原创 2021-07-02 14:34:39 · 92 阅读 · 0 评论 -
STL学习笔记(12)函数对象
函数对象 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。 注意 1.函数对象(仿函数)是一个类,不是一个函数。 2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。 函数对象分类: 假定某个类有一个重载的 operator(),而且重载的 operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary functor)原创 2021-07-02 14:29:12 · 123 阅读 · 0 评论 -
STL学习笔记(11)常用容器 map/multimap
map/multimap 基本概念 Map 的特性是,所有元素都会根据元素的键值自动排序。Map 所有的元素都是 pair,同时拥有实值和键值,pair 的 第一元素被视为键值,第二元素被视为实值,map 不允许两个元素有相同的键值。 我们可以通过 map 的迭代器改变 map 的键值吗?答案是不行,因为 map 的键值关系到 map 元素的排列规则,任 意改变 map 键值将会严重破坏 map 组织。如果想要修改元素的实值,那么是可以的。 Map 和 list 拥有相同的某些性质,当对它的容器元素进行新增原创 2021-04-11 12:40:53 · 126 阅读 · 0 评论 -
STL学习笔记(10)常用容器 pair
对组(pair)将一对值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用 pair 的两个公有属性 first 和 second 访问。 类模板:template <class T1, class T2> struct pair. 如何创建对组? //第一种方法创建一个对组 pair<string, int> pair1(string("name"), 20); cout << pair1.first << endl; //访问 pair 第一原创 2021-04-11 11:48:24 · 98 阅读 · 0 评论 -
STL学习笔记(9)常用容器 set/multiset
set/multiset 容器基本概念 Set 的特性是:所有元素都会根据元素的键值自动被排序。Set 的元素不像 map 那样可以同时拥有实值和键值,set 的元素即是键值又是实值。Set 不允许两个元素有相同的键值。 我们可以通过 set 的迭代器改变 set 元素的值吗?不行,因为 set 元素值就是其键值,关系到 set 元素的排序规则。 如果任意改变 set 元素值,会严重破坏 set 组织。换句话说,set 的 iterator 是一种 const_iterator. set 拥有和 list原创 2021-04-11 11:40:08 · 134 阅读 · 0 评论 -
STL学习笔记(8)常用容器 list
list 容器基本概念 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相较于 vector 的连续线性空间,list 就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。因此,list 对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元原创 2021-04-11 11:29:52 · 108 阅读 · 0 评论 -
STL学习笔记(7)常用容器 queue
queue 容器基本概念 Queue 是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue 容器允许从一端新增元素,从另 一端移除元素。 queue 没有迭代器 Queue 所有元素的进出都必须符合”先进先出”的条件,只有 queue 的顶端元素,才有机会被外界取用。Queue 不提 供遍历功能,也不提供迭代器。 queue 常用操作 1. queue 构造函数 queue<T> queT;//queue 采用模板类实现,queue 对象的默认构原创 2021-04-11 11:11:55 · 117 阅读 · 0 评论 -
STL学习笔记(6)常用容器 stack
stack 容器基本概念 stack 是一种先进后出(First In Last Out, FILO)的数据结构,它只有一个出口,形式如图所示。stack 容器允许新增元素, 移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取 stack 的其他元素。换言之,stack 不允许有遍历行为。 有元素推入栈的操作称为:push,将元素推出 stack 的操作称为 pop。 stack 没有迭代器 Stack 所有元素的进出都必须符合”先进后出”的条件,只有 stack 顶端的元素,才有机会被外原创 2021-04-11 11:07:36 · 103 阅读 · 0 评论 -
STL学习笔记(5)常用容器 deque
deque 容器基本概念 Vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以 在头尾两端分别做元素的插入和删除操作,当然,vector 容器也可以在头尾两端插入元素,但是在其头部操作效率 奇差,无法被接受。 Deque 容器和 vector 容器最大的差异,一在于 deque 允许使用常数项时间对头端进行元素的插入和删除操作。二 在于 deque 没有容量的概念,因为它是动态的以分段连续空间组合而成,随时可以增加一段新的空间并链接起来, 换句原创 2021-04-11 11:02:48 · 106 阅读 · 0 评论 -
STL学习笔记(4)常用容器 vector
vector 容器基本概念 vector 的数据安排以及操作方式,与 array 非常相似,两者的唯一差别在于空间的运用的灵活性。Array 是静态空间, 一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间, 然后将旧空间的数据搬往新空间,再释放原来的空间。Vector 是动态空间,随着元素的加入,它的内部机制会自 动扩充空间以容纳新元素。因此 vector 的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必 害怕空间不足而一开始就要求一个大块头的原创 2021-04-10 19:18:10 · 119 阅读 · 0 评论 -
STL学习笔记(3)常用容器 string
string 容器基本概念 C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string 类,定义在头文件。 String 和 c 风格字符串对比: char*是一个指针,String 是一个类 string 封装了 char,管理这个字符串,是一个 char 型的容器。 String 封装了很多实用的成员方法 查找 find,拷贝 copy,删除 delete 替换 replace,插入 insert 不用考虑内存释放和越界 string 管理 ch原创 2021-04-10 18:54:00 · 110 阅读 · 0 评论 -
STL学习笔记(2)STL 三大组件
容器 容器,置物之所也。 研究数据的特定排列方式,以利于搜索或排序或其他特殊目的,这一门学科我们称为数据结构。大学信息类相关 专业里面,与编程最有直接关系的学科,首推数据结构与算法。几乎可以说,任何特定的数据结构都是为了实现 某种特定的算法。STL 容器就是将运用最广泛的一些数据结构实现出来。 常用的数据结构:数组(array),链表(list),tree(树),栈(stack),队列(queue),集合(set),映射表(map),根据数据在容器中的 排列特性,这些数据分为序列式容器和关联式容器两种:原创 2021-04-10 18:23:42 · 131 阅读 · 0 评论 -
STL学习笔记(1)STL 概述
长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序 员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries), 类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。 复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的数据结构(data structures) 和算法原创 2021-04-10 17:42:24 · 183 阅读 · 0 评论 -
[C语言] #、##、__VA_ARGS__的使用
从网上借鉴了一些内容,然后整理了一下三者的区别,记录一下。 #include <iostream> // #: 用来把参数转换成字符串 #define LOG1(x) do { printf("%s=%d\n",#x,x); }while(0) // ##:用于将带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串;但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元; #define LOG2(x) log##x() // __VA原创 2021-03-14 18:04:27 · 386 阅读 · 0 评论 -
[C++] C++中的new/delete和C中的malloc/free的区别
本文主要正对于malloc/free和new/delete的概念与用法区别进行阐述相同点 他们都可以用来申请动态内存和释放内存原创 2015-06-20 22:05:35 · 1186 阅读 · 0 评论