- 博客(228)
- 资源 (151)
- 问答 (2)
- 收藏
- 关注
原创 主机字节序与网络字节序
主机字节序(CPU 字节序)概念主机字节序又叫 CPU 字节序,其不是由操作系统决定的,而是由 CPU 指令集架构决定的。主机字节序分为两种:•大端字节序(Big Endian):高序字节存储在低位地址,低序字节存储在高位地址•小端字节序(Little Endian):高序字节存储在高位地址,低序字节存储在低位地址存储方式32 位整数 0x12345678 是从起始位置为 0x00 的地址开始存放,则:大端小端图片判断大端小端可以这样判断自己 CPU 字节序是大端还是小端:#inc
2021-01-28 09:49:44 325 2
原创 Linux 内核的同步方式
原因在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理同步方式•原子操作•信号量(semaphore)•读写信号量(rw_semaphore)•自旋锁(spinlock)•大内核锁(BKL,Big Kernel Lock)•读写锁(rwlock)•大读者锁(brlock-Big Reader Lock)•读-拷贝修改(RCU,Read-Copy
2021-01-28 09:47:40 289 1
原创 进程与线程
进程与线程对于有线程系统: * 进程是资源分配的独立单位 * 线程是资源调度的独立单位对于无线程系统: * 进程是资源调度、分配的独立单位进程之间的通信方式以及优缺点•管道(PIPE)–有名管道:一种半双工的通信方式,它允许无亲缘关系进程间的通信•优点:可以实现任意关系的进程间的通信•缺点:1.长期存于系统中,使用不当容易出错2.缓冲区有限–无名管道:一种半双工的通信方式,只能在具有亲缘关系的进程间使用(父子进程)•优点:简单方便•缺点:1.局限于单向通信2.只能创建在它的进程以
2021-01-28 09:44:29 185
原创 c++八叉树
八叉树图片八叉树(octree),或称八元树,是一种用于描述三维空间(划分空间)的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分叉中心。用途•三维计算机图形•最邻近搜索...
2021-01-28 09:18:30 801 1
原创 C++B树
B 树(B-tree)、B+ 树(B±tree)特点•一般化的二叉查找树(binary search tree)•“矮胖”,内部(非叶子)节点可以拥有可变数量的子节点(数量范围预先定义好)应用•大部分文件系统、数据库系统都采用B树、B+树作为索引结构区别•B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。•B+树中所有叶子节点都是通过指针连接在一起,而B树不会。B树的优点对于在内部节点的数据,可直接得到,不必根据
2021-01-28 09:17:52 530 1
原创 c++红黑树
红黑树的特征是什么?1.节点是红色或黑色。2.根是黑色。3.所有叶子都是黑色(叶子是 NIL 节点)。4.每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)(新增节点的父节点必须相同)5.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。(新增节点必须为红)调整1.变色2.左旋3.右旋应用•关联数组:如 STL 中的 map、set红黑树、B 树、B+ 树的区别?•红黑树的深度比较大,而 B 树和 B+ 树的深度则相对要小一些
2021-01-28 09:16:45 359 1
原创 C++平衡二叉树(AVL树)
性质•左子树树高 - 右子树树高 | <= 1•平衡二叉树必定是二叉搜索树,反之则不一定•最小二叉平衡树的节点的公式:F(n)=F(n-1)+F(n-2)+1 (1 是根节点,F(n-1) 是左子树的节点数量,F(n-2) 是右子树的节点数量)平衡二叉树图片最小失衡树平衡二叉树插入新结点导致失衡的子树调整:•LL 型:根的左孩子右旋•RR 型:根的右孩子左旋•LR 型:根的左孩子左旋,再右旋•RL 型:右孩子的左子树,先右旋,再左旋...
2021-01-28 09:16:03 343 1
原创 C++二叉树
二叉树性质1.非空二叉树第 i 层最多 2(i-1) 个结点 (i >= 1)2.深度为 k 的二叉树最多 2k - 1 个结点 (k >= 1)3.度为 0 的结点数为 n0,度为 2 的结点数为 n2,则 n0 = n2 + 14.有 n 个结点的完全二叉树深度 k = ⌊ log2(n) ⌋ + 15.对于含 n 个结点的完全二叉树中编号为 i (1 <= i <= n) 的结点1.若 i = 1,为根,否则双亲为 ⌊ i / 2 ⌋2.若 2i > n,
2021-01-28 09:14:50 197
原创 C++广义表
广义表头尾链表存储表示广义表的头尾链表存储表示和图片// 广义表的头尾链表存储表示typedef enum {ATOM, LIST} ElemTag;// ATOM==0:原子,LIST==1:子表typedef struct GLNode { ElemTag tag; // 公共部分,用于区分原子结点和表结点 union { // 原子结点和表结点的联合部分 AtomType atom; // atom 是原子结点的值域,
2021-01-28 09:12:44 352
原创 C++数据结构之链式结构
链式结构链式数据结构typedef struct LNode { ElemType data; struct LNode *next;} LNode, *LinkList; 链队列(Link Queue)链队列图片线性表的链式表示单链表(Link List)单链表图片双向链表(Du-Link-List)双向链表图片循环链表(Cir-Link-List)循环链表图片哈希表HashTable.cpp概念哈希函数:H(key): K -> D , k
2021-01-27 10:00:11 473
原创 C++数据结构之顺序结构
顺序结构顺序栈(Sequence Stack)顺序栈数据结构和图片typedef struct { ElemType *elem; int top; int size; int increment;} SqSrack;队列(Sequence Queue)队列数据结构typedef struct { ElemType * elem; int front; int rear; int maxSize;}SqQueue;非循环
2021-01-27 09:54:39 338
原创 STL算法
**// 简单查找算法,要求输入迭代器(input iterator)find(beg, end, val);//返回一个迭代器指向输入序列中第一个等于 val 的元素,未找到返回 endfind_if(beg, end, unaryPred);//返回迭代器,指向第一个满足 unaryPred 的元素,未找到返回 endfind_if_not(beg, end, unaryPred);// 返回迭代器,指向第一个令 unaryPred 为 false 的元素,未找到返回 endcount(b
2021-01-27 09:48:49 180
原创 pair容器
pair这个类把一对值(values)结合在一起,这些值可能是不同的类型(T1 和 T2)。每个值可以被公有的成员变量first、second访问。pair是tuple(元组)的一个特例。pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。应用:•可以将两个类型数据组合成一个如map<key, value>•当某个函数需要两个返回值时template <class T1, clas
2021-01-27 09:47:07 676
原创 tuple容器
tuple元组是一个能够容纳元素集合的对象。每个元素可以是不同的类型。template <class… Types> class tuple;Example#include <iostream> // std::cout#include <tuple> // std::tuple, std::get, std::tie, std::ignoreint main (){ std::tuple<int,char> foo
2021-01-27 09:43:48 285
原创 map容器
mapmap 是关联容器,按照特定顺序存储由 key value (键值) 和 mapped value (映射值) 组合形成的元素。在映射中,键值通常用于对元素进行排序和唯一标识,而映射的值存储与此键关联的内容。该类型的键和映射的值可能不同,并且在部件类型被分组在一起VALUE_TYPE,这是一种对类型结合两种:typedef pair<const Key, T> value_type;在内部,映射中的元素总是按照由其内部比较对象(比较类型)指示的特定的严格弱排序标准按键排序。映射
2021-01-27 09:40:48 226
原创 forward_list容器
forward_listforward_list(单向链表)序列容器,允许在序列中任何地方进行恒定的时间插入和擦除操作。forward_list(单向链表)被实现为单链表; 单链表可以将它们包含的每个元素存储在不同和不相关的存储位置中。通过关联到序列中下一个元素的链接的每个元素来保留排序。forward_list容器和列表之间的主要设计区别容器是第一个内部只保留一个到下一个元素的链接,而后者每个元素保留两个链接:一个指向下一个元素,一个指向前一个元素,允许在两个方向上有效的迭代,但是每个元素消耗额外的
2021-01-27 09:35:19 312
原创 deque容器
deque(['dek])(双端队列)是double-ended queue 的一个不规则缩写。deque是具有动态大小的序列容器,可以在两端(前端或后端)扩展或收缩。特定的库可以以不同的方式实现deques,通常作为某种形式的动态数组。但是在任何情况下,它们都允许通过随机访问迭代器直接访问各个元素,通过根据需要扩展和收缩容器来自动处理存储。因此,它们提供了类似于vector的功能,但是在序列的开始部分也可以高效地插入和删除元素,而不仅仅是在结尾。但是,与vector不同,deques并不保证将其所有
2021-01-27 09:33:38 301
原创 array容器
arrayarray是固定大小的顺序容器,它们保存了一个以严格的线性顺序排列的特定数量的元素。在内部,一个数组除了它所包含的元素(甚至不是它的大小,它是一个模板参数,在编译时是固定的)以外不保存任何数据。存储大小与用语言括号语法([])声明的普通数组一样高效。这个类只是增加了一层成员函数和全局函数,所以数组可以作为标准容器使用。与其他标准容器不同,数组具有固定的大小,并且不通过分配器管理其元素的分配:它们是封装固定大小数组元素的聚合类型。因此,他们不能动态地扩大或缩小。零大小的数组是有效的,但是它们
2021-01-27 09:14:56 475
原创 C++STL的组成
组成 部分:•容器(containers)•算法(algorithms)•迭代器(iterators)•仿函数(functors)•配接器(adapters)•空间配置器(allocator)
2021-01-26 09:31:37 309 1
原创 C++ map方法
mapmap 是关联容器,按照特定顺序存储由 key value (键值) mapped value (映射值) 组合形成的元素。
2021-01-26 09:29:18 228 1
原创 C++ deque方法
dequedeque(['dek])(双端队列)是double-ended queue 的一个不规则缩写。deque是具有动态大小的序列容器,可以在两端(前端或后端)扩展或收缩。
2021-01-26 09:27:37 346 1
原创 Effective C++
1.视 C++ 为一个语言联邦(C、Object-Oriented C++、Template C++、STL)2.宁可以编译器替换预处理器(尽量以 const、enum、inline 替换 #define)3.尽可能使用 const4.确定对象被使用前已先被初始化(构造时赋值(copy 构造函数)比 default 构造后赋值(copy assignment操作符(=))效率高)5.了解 C++ 默默编写并调用哪些函数(编译器暗自为 class 创建 default 构造函数、copy 构造函数、c
2021-01-26 09:19:10 310
原创 C++运行时类型信息 (RTTI)
dynamic_cast•用于多态类型的转换typeid•typeid 运算符允许在运行时确定对象的类型•type_id 返回一个 type_info 对象的引用•如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数•只能获取对象的实际类型type_info•type_info 类描述编译器在程序中生成的类型信息。 此类的对象可以有效存储指向类型的名称的指针。 type_info 类还可存储适合比较两个类型是否相等或比较其排列顺序的编码值。 类型的编码规则和排列顺序是未指定的,并且可
2021-01-26 09:15:35 281
原创 c++强制类型转换运算符
static_cast•用于非多态类型的转换•不执行运行时类型检查(转换安全性不如 dynamic_cast)•通常用于转换数值数据类型(如 float -> int)•可以在整个类层次结构中移动指针,子类转化为父类安全(向上转换),父类转化为子类不安全(因为子类可能有不在父类的字段或方法)向上转换是一种隐式转换。dynamic_cast•用于多态类型的转换•执行行运行时类型检查•只适用于指针或引用•对不明确的指针的转换将失败(返回 nullptr),但不引发异常•可以在整个类层
2021-01-26 09:13:58 265
原创 C++智能指针
C++ 标准库(STL)中头文件:#include C++ 98std::auto_ptrstd::string ps (new std::string(str));C++ 111.shared_ptr2.unique_ptr3.weak_ptr4.auto_ptr(被 C++11 弃用)•Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构
2021-01-26 09:11:48 161
原创 c++如何定义一个只能在堆上(栈上)生成对象的类?
只能在堆上方法:将析构函数设置为私有原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。只能在栈上方法:将 new 和 delete 重载为私有原因:在堆上生成对象,使用 new 关键词操作,其过程分为两阶段:第一阶段,使用 new 在堆上寻找可用内存,分配给对象;第二阶段,调用构造函数生成对象。将 new 操作设置为私有,那么第一阶段就无法完成,就不能够在堆上生成对象。...
2021-01-25 09:46:23 332 1
原创 C++内存分配和管理
malloc、calloc、realloc、alloca1.malloc:申请指定字节数的内存。申请到的内存中的初始值不确定。2.calloc:为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存的按bit初始化为 0。3.realloc:更改以前分配的内存长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定。4.alloca:在栈上申请内存。程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca 不具可移植性, 而且在没有传
2021-01-25 09:45:14 293
原创 c++虚继承和虚函数和抽象类、接口类,聚合类
虚继承虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间、存在二义性)。底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间,4字节)和虚基类表(不占用类对象的存储空间)(需要强调的是,虚基类依旧会在子类里面存在最多一份拷贝);当虚继承的子类被当做父类继承时,虚基类指针也会被继承。实际上,vbptr 指的是虚基类表指针(virtual base table pointer),该指针指向了一个虚基类表(virtual table),虚
2021-01-25 09:42:52 448 1
原创 C++虚析构函数,虚函数,纯虚函数,虚函数指针、虚函数表
虚析构函数虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。虚析构函数使用class Shape{public: Shape(); // 构造函数不能是虚函数 virtual double calcArea(); virtual ~Shape(); // 虚析构函数};class Circle : public Shape // 圆形类{public: virtual
2021-01-25 09:40:28 257
原创 C++静态多态与动态多态
静态多态(编译期/早绑定)函数重载class A{public: void do(int a); void do(int a, int b);};动态多态(运行期期/晚绑定)•虚函数:用 virtual 修饰成员函数,使其成为虚函数注意:•普通函数(非类成员函数)不能是虚函数•静态函数(static)不能是虚函数•构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针)•内联函数不能是表现多态性时的虚函
2021-01-25 09:37:52 242
原创 C++面向对象特征
面向对象程序设计(Object-oriented programming,OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。面向对象特征面向对象三大特征 —— 封装、继承、多态封装把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。关键字:public, protected, private。不写默认为 private。•public 成员:可以被任意实体访问•protected 成员:只允许被子类及本类的成员函数访问
2021-01-25 09:36:06 339 1
原创 C++初始化列表
成员初始化列表好处•更高效:少了一次调用默认构造函数的过程。•有些场合必须要用初始化列表:1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面2.引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面3.没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。initializer_list 列表初始化用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer
2021-01-25 09:34:42 220
原创 C++宏
宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对 “参数” 进行的是一对一的替换。
2021-01-25 09:33:30 482 1
原创 C++引用
左值引用常规引用,一般表示对象的身份。右值引用右值引用就是必须绑定右值(一个临时对象、将要销毁的对象)的引用,一般表示对象的值。右值引用可实现转移语义(Move Sementics)和精确传递(Perfect Forwarding),它的主要目的有两个方面:•消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。•能够更简洁、明确地定义泛型函数。引用折叠•X& &、X& &&、X&& & 可折叠成 X&•X&
2021-01-25 09:32:50 240 1
原创 C++decltype关键字
decltypedecltype 关键字用于检查实体的声明类型或表达式的类型及值分类。语法:decltype ( expression )decltype 使用// 尾置返回允许我们在参数列表之后声明返回类型template <typename It>auto fcn(It beg, It end) -> decltype(*beg){ // 处理序列 return *beg; // 返回序列中一个元素的引用}// 为了使用模板参数成员,必须用 t
2021-01-25 09:31:27 260
VTK 直线和数据集的交集 vtkOBBTree 返回所有与直线和数据集的交集
2023-02-26
VTK 查找KDTree最接近查询点的点 此示例创建一组三个点,从它们生成 KDTree,然后演示如何查找最接近查询点的点
2023-02-26
VTK 获取KDTree点数 此示例演示如何生成 KDTree、获取其点数以及按 ID 获取点数 完整可编译运行的实例
2023-02-26
VTK 凯德树 此示例演示如何使用 vtkKdTree 从 vtkPoints 对象生成树
2023-02-26
VTK 3D AMR 数据集
2023-02-26
VTK 2D AMR 数据集
2023-02-26
VTK XYPlot 此示例演示如何使用 vtkXYPlotActor 使用三种不同的技术显示三条探测线
2023-02-26
VTK TextOrigin 此示例演示了 vtkVectorText 和 vtkFollower 的使用
2023-02-26
VTK 多行文本 此示例演示如何使用 vtkTextMapper 的多行 2D 文本 它显示了几个理由以及单行和多行文本输入
2023-02-26
VTK 旋转球体 此示例演示如何创建旋转球体 计时器用于沿 z 轴旋转球体 完整可编译运行的实例
2023-02-26
VTK/将场景保存到文件/将当前 vtkCamera 位置存储在文件中/ 完整可编译运行的实例
2023-02-26
VTK/保存场景到字段数据/将当前 vtkCamera 位置存储在 vtkDataSet 的 vtkFi/ 完整可编译运行的实例
2023-02-26
VTK/将场景保存到文件/将当前 vtkCamera 位置存储在文件中/ 完整可编译运行的实例
2023-02-26
VTK/保存场景到字段数据/将当前 vtkCamera 位置存储在 vtkDataSet 的 vtkFieldData 中/ 完
2023-02-26
VTK/选择对比色/给定一种颜色,找到一种对比色 如果给定的颜色是“浅色”,则使用浅色,否则使用深色/ 完整可编译运行的实例
2023-02-26
你们的周报咋样呢?欢迎大家一键三连[face]emoji:019.png[/face]
2021-06-03
这访问量咋样?[face]emoji:010.png[/face]
2021-06-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人