-
C++11右值引用 一看即明白
所属栏目:[语言] 日期:2022-07-14 热度:50
《C++11是什么》一节中提到,在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。 很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的 C++[详细]
-
C++11 move函数 将左值强制变换为右值
所属栏目:[语言] 日期:2022-07-14 热度:188
通过学习 《C++11移动构造函数》一节我们知道,C++11 标准中借助右值引用可以为指定类添加移动构造函数,这样当使用该类的右值对象(可以理解为临时对象)初始化同类对象时,编译器会优先选择移动构造函数。 注意,移动构造函数的调用时机是:用同类的右值对[详细]
-
C++ STL是什么 有啥用
所属栏目:[语言] 日期:2022-07-13 热度:119
在已有 C++ 尤其是 C++ 模板的基础上,从本节开始,我们开始系统地学习 STL 标准模板库,首先来了解什么是 STL,以及学习 STL 有什么用? STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C+[详细]
-
C++ STL的发展历程是啥样的
所属栏目:[语言] 日期:2022-07-13 热度:115
Alexander Stepanov(后被誉为 STL 标准模板库之父,后简称 Stepanov),1950 年出生与前苏联的莫斯科,他曾在莫斯科大学研究数学,此后一直致力于计算机语言和泛型库研究。 在 20 世纪 70 年代,Stepanov 开始考虑,在保证效率的前提下,是否能将算法从诸多[详细]
-
C++ STL版本有什么
所属栏目:[语言] 日期:2022-07-13 热度:64
自 1998 年 ANSI/ISO C++ 标准正式定案,C++ STL 规范版本正式通过以后,由于其实开源的,各个 C++ 编译器厂商在此标准的基础上,实现了满足自己需求的 C++ STL 泛型库,主要包括 HP STL、SGI STL、STLport、PJ STL、Rouge Wave STL 等。 HP STL HP STL 是 A[详细]
-
C++ STL基础组成 6大组件+13个头文件
所属栏目:[语言] 日期:2022-07-13 热度:109
通常认为,STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的,它们各自的含义如表 1 所示。 另外,在惠普实验室最初发行的版本中,STL 被组织成 48 个头文件;但在 C++ 标准中,它们被重新组织[详细]
-
GNU开源精神及其发展进程
所属栏目:[语言] 日期:2022-07-13 热度:73
通过前面对 STL 各种民间版本的介绍我们知道,全世界所有的 STL 实现版本都源于 Stepanov 和 Meng Lee 完成的原始版本(也就是 HP STL),该版本的每一个头文件中都有一份声明,即允许任何人任意运用、拷贝、修改、传播、贩卖这些代码,无需付费,但唯一的条[详细]
-
C++11引用限定符的用处
所属栏目:[语言] 日期:2022-07-13 热度:64
在《C++右值引用》一节中,我们给您介绍了左值和右值。值得一提的是,左值和右值的区分也同样适用于类对象,本节中将左值的类对象称为左值对象,将右值的类对象称为右值对象。 默认情况下,对于类中用 public 修饰的成员函数,既可以被左值对象调用,也可以[详细]
-
C++11 shared_ptr智能指针 超级具体
所属栏目:[语言] 日期:2022-07-13 热度:178
在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如: 有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用[详细]
-
C++ STL容器叫做什么
所属栏目:[语言] 日期:2022-07-13 热度:93
在实际的开发过程中,合理组织数据的存取与选择处理数据的算法同等重要,存取数据的方式往往会直接影响到对它们进行增删改查操作的复杂程度和时间消耗。事实上,当程序中存在对时耗要求很高的部分时,数据结构的选择就显得尤为重要,有时甚至直接影响程序执[详细]
-
迭代器是什么 C++ STL迭代器 iterator 用法细说
所属栏目:[语言] 日期:2022-07-13 热度:80
无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用迭代器(iterator)来实现。那么,迭代器到底是什么呢? 常用的迭代器按功能强弱分为输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器 5[详细]
-
C++序列式容器 STL序列式容器 是啥
所属栏目:[语言] 日期:2022-07-13 热度:200
所谓序列容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。 需要注意的是,序列容器只是一类容器的统称,并不指具体的某个容器,序[详细]
-
Java集合详解
所属栏目:[语言] 日期:2022-07-12 热度:55
在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,如成绩表为语文79,数学80,这种数据[详细]
-
Java List集合 ArrayList和LinkedList类的用法及区别
所属栏目:[语言] 日期:2022-07-12 热度:193
List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推[详细]
-
Java Map集合详解
所属栏目:[语言] 日期:2022-07-12 热度:178
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键(key)对象和一个值(value)对象。用于保存具有映射关系的数据。 Map 集合里保存着两组值,一组值用于保存 Map 里的 key,另外一组值用于保存 Map 里的 value,key 和 value 都可[详细]
-
Java遍历Map集合的四种方式
所属栏目:[语言] 日期:2022-07-12 热度:104
Map 集合的遍历与 List 和 Set 集合不同。Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。Map 以及实现 Map 的接口类(如 HashMap、TreeMap、LinkedHashMap、Hashtable 等)都可以用以下几种方式遍历。 1)在 for 循环[详细]
-
Java Collections类操作集合详解
所属栏目:[语言] 日期:2022-07-12 热度:134
Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作。下面介绍 Collections 类中操作集合的常用方法。 排序(正向和逆向[详细]
-
Java使用Lambda表达式遍历Collection集合
所属栏目:[语言] 日期:2022-07-12 热度:140
Java 8 为 Iterable 接口新增了一个 forEach(Consumer action) 默认方法,该方法所需参数的类型是一个函数式接口,而 Iterable 接口是 Collection 接口的父接口,因此 Collection 集合也可直接调用该方法。 当程序调用 Iterable 的 forEach(Consumer action)[详细]
-
Java Iterator 迭代器 遍历Collection集合元素
所属栏目:[语言] 日期:2022-07-12 热度:92
Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中的[详细]
-
Java Set集合 HashSet和TreeSet类
所属栏目:[语言] 日期:2022-07-12 热度:197
Set 集合类似于一个罐子,程序可以依次把多个对象丢进Set 集合,而 Set 集合通常不能记住元素的添加顺序。也就是说 Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合。Set 集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。 Set[详细]
-
Java的异常跟踪栈
所属栏目:[语言] 日期:2022-07-12 热度:172
异常对象的 printStackTrace() 方法用于打印异常的跟踪栈信息,根据 printStackTrace() 方法的输出结果,开发者可以找到异常的源头,并跟踪到异常一路触发的过程。 看下面用于测试 printStackTrace 的例子程序。 class SelfException extends RuntimeExcepti[详细]
-
Java Collection接口详解
所属栏目:[语言] 日期:2022-07-12 热度:70
Collection 接口是 List、Set 和 Queue 接口的父接口,通常情况下不被直接使用。Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。 本节将介绍 Collection[详细]
-
AOE网求关键路径详解 包括C语言实现代码
所属栏目:[语言] 日期:2022-07-11 热度:134
在学习拓扑排序一节时讲到拓扑排序只适用于 AOV 网,本节所介绍的求关键路径针对的是和 AOV 网相近的 AOE 网。 什么是AOE网 AOE 网是在 AOV 网的基础上,其中每一个边都具有各自的权值,是一个有向无环网。其中权值表示活动持续的时间。 就是一个 AOE 网,例[详细]
-
数据构架之动态内存管理机制
所属栏目:[语言] 日期:2022-07-11 热度:120
通过前面的学习,介绍很多具体的数据结构的存储以及遍历的方式,过程中只是很表面地介绍了数据的存储,而没有涉及到更底层的有关的存储空间的分配与回收,从本节开始将做更深入地介绍。 在使用早期的计算机上编写程序时,有关数据存储在什么位置等这样的问题[详细]
-
边界标识法管制动态内存
所属栏目:[语言] 日期:2022-07-11 热度:158
本节介绍一种解决系统中内存碎片过多而无法使用的方法边界标识法。 每个结点中包含 3 个区域,head 域、foot 域 和 space 域: space 域表示为该内存块的大小,它的大小通过 head 域中的 size 值表示。 head 域中包含有 4 部分:llink 和 rlink 分别表示指向[详细]