![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
CopperDong
纯属巧合
展开
-
C++标准库笔记 2
7、容器7.1、容器的共通能力三个最核心的能力:所有容器提供的都是“value 语义” 而非 “reference 语义”。 元素有特定顺序。 各项操作并非绝对安全,调用者必须确保传参检查。初始化所有容器提供的类型8、细探 STL 容器成员创建、复制和销毁9、迭代器头文件10、STL 函数对象及 Lambdalambda11、STL 算法<algorithm>12、特殊容器三种标准的 stacks, queu.原创 2020-12-26 12:23:15 · 189 阅读 · 0 评论 -
C++11 标准库笔记1
STL(standard template library,标准模板库)初始化:int values[] {1, 2, 3}引入 range-based for 循环:for (decl: coll) { statement}// 打印某集合内所有元素,这里不用& 会产生 copytemplate <typename T>void printElements (const T& coll) { for (const auto&a...原创 2020-12-18 11:12:38 · 238 阅读 · 0 评论 -
STL(十三)map映照容器
P211map映照容器所处理的元素数据,与数据库表的具有键值的记录非常相似,由一个键值和其他若干数据(映照数据)组成,键值和映照数据之间,可建立一个数学上的映照关系,由此而得映照容器的名称。容器的数据结构同样是采用红黑树进行管理,插入的元素键值不允许重复,所使用的节点元素的比较函数,只对元素的键值进行比较,元素的各项数据可通过检索出来。一、map技术原理键值,映照数据是map容器的一个元素原创 2017-09-01 09:55:15 · 326 阅读 · 0 评论 -
STL(十四)multimap多重映照容器
multimap与map一样,都是使用红黑树对记录型的元素数据按元素键值的比较关系,进行快速的插入、删除与检索操作,所不同的是multimap允许将具有重复键值的元素插入容器。在multimap容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap称为多重映照容器。multimap与map之间的多重特性差异,类似于multiset与set的多重特性差异。一、multi原创 2017-09-01 19:46:47 · 299 阅读 · 0 评论 -
STL(十五)hash_set哈希集合容器
hash_set哈希集合容器是一种使用哈希表(hashtable)数据结构的具有高效数据检索的关联容器。作为一种集合容器,它的元素不论有多少个分量 ,都视为一个单一的数据类型,元素的键值就是元素本身。根据元素键值的大小,按照某个函数式子(哈希函数)直接计算元素的哈希地址,确定元素的具体存放位置。哈希函数是一个多对一的函数,不同元素可能具有相同的哈希地址。进行检索时,先计算元素的哈希地址,然后就可用原创 2017-09-01 19:54:52 · 1786 阅读 · 0 评论 -
STL(十六)hash_map哈希映照容器
hash_map哈希映照容器与map映照容器比较相似,都将记录型的元素划分为键值和映照数据两个部分,然后根据键值的大小,将键值不重复的元素插入容器。不同之处在于,hash_map使用哈希表的数据结构,map使用红黑树的数据结构。对于元素的检索来说,这两种数据结构都有快速的检索效率。hash_map检索时使用的键值比较次数少,容器需占用较多的空间,用迭代器遍历出来的元素是非排序的。map则使用链表的原创 2017-09-01 20:13:21 · 372 阅读 · 0 评论 -
STL(十七)string基本字符序列容器
一、string技术原理 字符串由一个个字符组成,字符分为单字节char和双字节wchar_t两种。因此,构造泛型的字符串类,必须适用于以上两种类型的字符。单字节的字符串类型string和双字节的字符串类型wstring二、string应用基础#include 1、创建string对象2、字符的添加3、字符的遍历访问 iterator beg原创 2017-09-01 21:13:37 · 342 阅读 · 0 评论 -
STL(十八)stack堆栈容器
一、stack技术原理 二、stack应用基础#include 1、创建stack对象 stack() stack(const stack &)2、元素入栈 push(const value_type &x)3、元素出栈 void pop()4、取栈顶元素 valu原创 2017-09-01 21:26:30 · 300 阅读 · 0 评论 -
STL(十九)queue队列容器
queue队列也是一个线性存储表一、queue技术原理二、queue应用基础#include 1、创建queue对象 queue() queue(const queue& )2、元素入队 void push(const value_type &x)3、元素出队 void pop()4、取队首、原创 2017-09-01 21:34:49 · 233 阅读 · 0 评论 -
STL(二十)priority_queue优先队列容器
优先队列也是一种从一端入队,另一端出队的队列。不同于一般队列的是,队列中最大的元素总是位于队首位置,因此,元素的出队并非按照先进先出的要求,将最先入队的元素出队,而是将当前队列中的最大元素出队。 STL优先队列的泛化,底层默认采用vector向量容器,使得队列容器的元素可做数组操作,从而应用堆算法找出当前队列最大元素,并将它调整到队首位置,确保最大元素先出队。 堆算法原创 2017-09-01 21:40:36 · 305 阅读 · 0 评论 -
C++(7)模板与泛型编程
条款41:了解隐式接口和编译期多态条款42:了解typename的双重意义条款43:学习处理模板化基类内的名称条款44:将与参数无关的代码抽离条款45:运用成员函数模板接受所有兼容类型条款46:需要类型转换时请为模板定义非成员函数条款47:请使用traits classes表现类型信息条款48:认识template元编程原创 2017-08-12 19:23:23 · 215 阅读 · 0 评论 -
STL(二十一)非变易算法
非变易算法是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。作为算法函数参数的迭代器,一般为Input Iterator输入迭代器,具有“++”迭代和“*”访问操作。通过迭代器的元素遍历,可对迭代器区间所界定的元素进行操作。因此,非变易算法具有极为广泛的适用性,基本上可应用于各种容器。一、逐个容器元素for_each#include temp原创 2017-09-02 21:45:33 · 321 阅读 · 0 评论 -
STL(二十二)变易算法
变易算法是一组能够修改容器元素数据的模板函数,可进行序列数据的复制、交换、替换、填充、移除、旋转、随机抖动和分别。这些算法对迭代器有较高的要求,具体的迭代器类型随各个算法而定,或前向迭代器 、或双向迭代器、又或者是随机迭代器,以提供算法所需要的迭代器操作。应用变易算法时,先要检查容器的迭代器是否符合要求,防止产生编译错误。一、元素复制copy#include template in原创 2017-09-03 08:27:27 · 281 阅读 · 0 评论 -
STL(二十四)数值算法
一组对容器元素进行数值计算的模板函数,包括容器元素求和accumulate、两序列元素的内积inner_product、容器元素的一系列部分元素和partial_sum、容器每对相邻元素的差、由SGI C++ STL扩展的递增赋值iota以及n次方power计算等。#include 一、递增赋值iota将一组递增的值赋值给区间元素二、元素求和accumulate将区间元素进行累原创 2017-09-03 09:46:16 · 340 阅读 · 0 评论 -
STL(二十五)输入输出流迭代器
输入输出流迭代器是架构在流之上的迭代器,如同容器的迭代器与容器的关系一样,对流的数据提供迭代器的操作支持。不过,输入输出流的迭代器只提供前向迭代“++”操作。输入流迭代器的“++”操作,把迭代器移到下一个读入位置。输出流迭代器的“++”操作,则是把迭代器移到下一个写入位置。 通过输入输出流的迭代器,就可以在输入输出流上使用C++ STL算法,使得算法的应用范围推广到流的数据处理上。原创 2017-09-03 09:49:59 · 474 阅读 · 0 评论 -
STL(二十六)插入/反向/存储迭代器
包括向前插入迭代器front_insert_iterator,向后插入迭代器back_insert_iterator、插入迭代器insert_iterator,反向迭代器reverser_iterator,反向双向迭代器reverse_bidirectional_iterator和原始存储迭代器raw_storage_iterator等,它们都是在迭代器的基础上进行构建,均可视为适配器,将一种迭代原创 2017-09-03 11:31:47 · 394 阅读 · 0 评论 -
STL(十二)multiset多重集合容器
与set集合容器一样,multiset多征集合容器也使用红黑树组织元素数据,只是multiset容器允许将重复的元素键值插入,而set容器则不允许。一、multiset技术原理二、multiset应用基础1、创建multiset对象2、元素的插入3、元素的删除4、元素的遍历访问5、元素的反向遍历6、元素的搜索#include #include i原创 2017-09-01 09:40:26 · 350 阅读 · 0 评论 -
STL(十一)set集合容器
set集合容器使用一种称为红黑树的平衡二叉检索树的数据结构,来组织泛化的元素数据,每个节点包含一个取值红色或黑色的颜色域,以利于进行树的平衡处理。作为节点键值的元素的插入,必须确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。不会将重复的键值插入容器,也不需指定具体的插入位置,而按元素在树中的关联关系,进行位置检索和插入,元素的删除亦然。 元素数据的检原创 2017-09-01 09:22:39 · 304 阅读 · 0 评论 -
STL(十)bit_vector位向量容器
bit_vector位向量容器是一个bit位元素的序列容器,具有vector容器一样的成员函数,常用于硬件端口的控制。区别于vector的一个重要特性是bit_vector更节省内存空间,一个元素只占用一个bit,而不是一个字节。 bit_vector用vector作后缀名,实际与vector并没有任何关联,将来版本的C++ STL,会为它设立一个专门的名称。一、bit_ve原创 2017-09-01 09:12:54 · 1256 阅读 · 0 评论 -
C++(7)模板与泛型编程
条款41:了解隐式接口和编译期多态条款42:了解typename的双重意义条款43:学习处理模板化基类内的名称条款44:将与参数无关的代码抽离条款45:运用成员函数模板接受所有兼容类型条款46:需要类型转换时请为模板定义非成员函数条款47:请使用traits classes表现类型信息条款48:认识template元编程原创 2017-08-12 20:11:43 · 237 阅读 · 0 评论 -
C++(6)继承与面向对象设计
C++的OOP有可能和你原本习惯的OOP稍有不同:“继承”可以是单一继承或多重继承,每一个继承连接可以是public, protected或private,也可以是virtual或non-virtual。然后是成员函数的各个选项:virtual?non-virtual?pure virtual?以及成员函数和其他语言特性的交互影响:缺省参数值与virtual函数有什么交互影响?继承如何影响C++的原创 2017-08-12 19:16:54 · 231 阅读 · 0 评论 -
C++(5)实现
条款26:尽可能延后变量定义式的出现时间条款27:尽量少做转型动作条款28:避免返回handles指向对象内部成分条款29:为“异常安全”而努力是值得的条款30:透彻了解inlining的里里外外条款31:将文件间的编译依存关系降至最低原创 2017-08-12 17:00:38 · 353 阅读 · 0 评论 -
C++(4)设计与声明
条款18:让接口容易被正确使用,不易被误用条款19:设计class犹如设计type 在C++中,当你定义一个新class,也就定义了一个新type条款20:宁以pass-by-reference-to-const替换pass-by-value 缺省情况下C++以by value方式(一个继承自C的方式)传递对象至函数。除非你另外指定,否则函数参数都是以实际实参的复件为原创 2017-08-12 16:54:02 · 219 阅读 · 0 评论 -
C++智能指针简单剖析
C++智能指针简单剖析导读最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。而且在看开源的C++项目时,也能随处看到智能指针的影子。这说明智转载 2017-08-12 16:36:49 · 327 阅读 · 1 评论 -
C++(3)资源管理
所谓资源就是,一旦用了它,将来必须还给系统条款13:以对象管理资源#获得资源后立刻放进管理对象内#管理对象运用析构函数确保资源被释放条款14:在资源管理中小心coping行为条款15:在资源管理类中提供对原始资源的访问条款16:成对使用new和delete时要采取相同形式条款17:以独立语句将newed对象置入智能指针原创 2017-08-12 16:36:16 · 253 阅读 · 0 评论 -
C++(2)构造/析构/赋值运算
几乎你写的每一个class都会有一个或多个构造函数、一个析构函数、一个copy assignment操作符。条款05:了解C++默默编写并调用哪些函数#编译吕可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数class Empty { };这就好像你写下这样的代码:class Empty {public:原创 2017-08-12 16:16:14 · 245 阅读 · 0 评论 -
C++(1)介绍
条款01: 视C++为一个语言联邦 最简单的方法是将C++视为一个由相关语言组成的联邦而非单一语言。为了理解C++,你必须认识其主要的次语言,总共有四个:1、C:说到底C++仍是以C为基础。区块、语句、预处理器、内置数据类型、数组、指针等2、Object-Oriented C++:这部分也就是C with Classes所诉求的: Classes(包括构造函数和析构函数),封装原创 2017-08-12 15:39:27 · 290 阅读 · 0 评论 -
STL(一)C++编程技术
C++语言由Bjarne Stroustrup开发,兼容于C语言,以面向对象方式,提供更直观的程序设计方法,更强大的语言开发能力,更严谨的安全管理和更有效的程序代码组织机制。一、类和对象:支持面向对象编程二、类的继承:一个类(继承类)可在另一个类(基类)的基础上,增设变量和函数,从而实现了基类的一个扩充三、函数重载:重载的函数都具有相同的函数名,但要求参数的类型或个数必须不同,以使原创 2017-08-28 21:16:40 · 703 阅读 · 0 评论 -
STL(二)C++模板技术
模板纯粹是为了将预处理宏推广到C++而来,不同于宏使用一套“指令开头用#,指令结尾不带分号,标志符定义不使用类型”的被受争议的语法。 模板的作用在于定制函数和类,因此又称模板函数和模板类,表明模板的语法形式仿照了熟悉的函数和类的语法,只是数据类型需要用关键字"template“声明为泛化的类型。一、函数模板//int max(int a, int b) {// re原创 2017-08-29 09:11:25 · 410 阅读 · 0 评论 -
STL(四)泛化技术基础
STL(Standard Template LIbrary)标准模板库提供了大量的模板类和模板函数,大大简化了数据结构和算法的代码编写任务。 考虑到在编译和应用上的一些因素,如模板类型的安全性检查、编译速度和减少语言的依赖性等,C++STL在广泛使用模板编程的同时,还引入了诸多concept概念、迭代器和函数对象等技术性的内容。一、C++ STL的发展历程 1971年左右引原创 2017-08-29 19:26:25 · 986 阅读 · 0 评论 -
STL(五)泛化技术分析
本章中,将选择有代表性的源码,分析算法、容器、迭代器、函数对象、适配器和内存分配器的泛化实现原理,并对各种Concept(概念)做出详细地说明一、算法和迭代器 算法使用迭代器来读写数据,尤其是通过容器自身的迭代器,对容器的数据进行操作。函数对象解决了在算法中调用外部函数的问题。适配器用于泛化类型的转换,可对迭代器、容器和函数对象进行转换。可以说,基于算法的泛化实现,引用了迭代器、函数原创 2017-08-29 20:47:43 · 551 阅读 · 0 评论 -
STL(六)Vector向量容器
作为数组的一个泛化推广的vector容器,vector是一种简单、高效的容器。在尾端插入和删除元素,算法时间复杂度为O(1)常数阶,其他元素的插入和删除为O(n)线性阶,其中n为vector容器的元素个数。vector具有自动的内存管理功能,对于元素的插入和删除,可动态调整所占用的内存空间。一、vector技术原理 vector容器是一个线性结构,3个指针变量分别为M_star原创 2017-08-31 15:23:23 · 373 阅读 · 0 评论 -
STL(七)deque双端队列容器
deque双端队列容器与vector非常相似,不仅可在尾部插入和删除,还可在头部插入和删除,时间复杂度是O(1),是一个实现了Random access container, Back insertion sequence 和 Front insertion sequence概念的模型。deque内部的数据机制与执行性能与vector不同,一般说来,当考虑到容器元素的内存分配策略和操作的性能时,d原创 2017-08-31 15:59:19 · 392 阅读 · 0 评论 -
STL(八)list双向链表容器
list是双向链表的一个泛化容器,实现了Reversible Container, Front Insertion Sequence and Back Insertion Sequence等概念的接口规范 不同于采用线性表顺序存储结构的vector and deque容器,list双向链表中任一位置的元素查找、插入和删除,都具有高效的常数阶算法时间复杂度O(1)一、list技术原理原创 2017-08-31 16:22:53 · 425 阅读 · 0 评论 -
C++(8)定制new和delete
条款49:了解new-handler的行为条款50:了解new和delete的合理替换时机条款51:编写new和delete时需固守常规条款52:写了placement new也要写placement delete原创 2017-08-12 20:26:54 · 270 阅读 · 0 评论