在Linux下,一切皆文件,而文件无非是被打开的文件与未被打开的文件。冯·诺依曼体系决定了,若要对磁盘上的文件进行读写,必须首先将其加载到内存中,所以被打开与未被打开文件之间最大的区别即为是否在内存中有一块属于自己的内存空间与相关的内存数据结构。在这篇文章中,我们讨论的即是被打开的文件,即是被加载到内存中的文件,即是文件的IO。本文会从之前讨论过的C语言的文件IO函数讲起,然后过渡到Linux有关
C++11概览自从1998年C++第一个标准定档以来,作为C++真正意义上的第二个大标准,C++11带来了数量巨大的变化,其中包含140多个新特性,以及600多个针对 C++98/03 的缺陷修正。C++11能更好地用于系统开发和库开发,语法更加泛化和简单化,更加稳定和安全,在保证功能强大的同时提高开发效率。C++11也有很多不完善的地方,除此之外,还有很多鸡肋的、被人吐槽的新特性和功能。本文只对
位图位图概述位图(bit set)中存储位(bit),每个元素只有两个可能值,1/0 或者 true/false。与bool数组相比,位图的空间开销更小,每个元素占据 1bit 空间,是C++最小内置类型char的八分之一。位图是哈希思想衍生出的容器,在完成哈希表判断元素存在功能的同时,极大地节省了所需的内存空间。位图的每个位都可以被单独访问,例如给定一个位图bitSet, 则 bitSet[3]
哈希概述哈希(hash)又称散列,其基本想法是,将存储的值与其存储位置建立某种映射,因此哈希的查找效率非常高,是一种支持常数平均时间查找的结构。与红黑树相比,哈希的效率表现是以统计为基础的,不需要依赖输入数据的随机性。建立值-址映射建立哈希结构的第一步是将“值”(数据)与“址”(存储位置,即下标)联系起来,便于利用“值”快速找到对应的元素。直接定址和除留余数是两种常用的映射方式,为了按索引快速访问
红黑树的性质和定义红黑树的性质红黑树是一种平衡搜索二叉树。红黑树的每个节点存储了一个标记颜色的变量(红色或黑色),通过对任意一条从根到叶子结点的路径中节点着色方式的限制,使树的最长路径不超过最短路径的两倍,因而红黑树处于一种近似平衡的状态。与AVL树相比,红黑的平衡条件更宽松,旋转的次数更少,因此在频繁插入删除的情况下,红黑树的性能比AVL树好。红黑树具有以下性质:根(_root)节点是黑色的;每
AVL树AVL树的定义和性质在输入值不够随机,或者经过某些插入或删除操作时,二叉搜索树会失去平衡,降低搜索效率,极端情况下,当插入数据接近有序时,二叉搜索树会退化为链表,导致搜索效率近似下降为O(N)。为了尽量保证二叉搜索树的平衡,两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在1962年发明了AVL树。AVL树是一种平衡搜索二叉树,其具有以下性质:它的左右
初始化列表给类的对象初始化(赋初值)有两种手段:在构造函数的函数体内赋值;初始化列表第一个方式在讨论构造函数时已经进行过说明,在创建对象时,编译器通过调用构造函数给对象中的各个成员变量赋一个合适的初始值。虽然通过调用构造函数,对象的各成员变量有了一个初始值,但严格来说并不能将其称为对象成员的初始化,因为初始化只进行一次,而在构造函数体内可以进行多次赋值。事实上,初始化列表是成员变量被定义和初始化的
面向过程和面向对象顾名思义,面向过程关注的完成一个事件的整个过程,面向对象关注的是事件的参与者及其之间的交互。C语言是面向过程的,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是面向对象的,将一件事拆分成不同对象,靠不同对象的交互完成。在面向对象编程的世界里,一切皆为对象,对象把数据与程序封装起来,提供对外访问的能力,提高了软件的重用性、灵活性和扩展性。类的引入和定义C++中的结构体在C语
什么是引用引用不是新定义一个变量,而是给已存在对象取了一个别名,从语言逻辑角度看,引用不占用内存空间,而与被引用的对象共用同一块内存空间。使用引用时,需要注意以下几点:引用在定义时必须初始化;一个变量可以有多个引用;C++中的引用一旦初始化便不能转移;在语法逻辑角度,引用不占用额外的内存空间,只是某个对象的别名引用的使用场景(意义)做参数输出型参数此时形参是实参的一个别名,形参的改变会影响实参,故
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号