【C++并发与多线程】 3_线程传参数详解,detach 注意事项

2021-02-01
阅读 7 分钟
3.8k
引用作为参数时,发生参数拷贝而不是引用传递;同时使用 std::ref() 与 thread::detach() 时,需要考虑主线程中的局部属性资源(对象)是否被子线程使用,并且主线程是否先于子线程结束。

【C++并发与多线程】 2_线程启动、结束,创建线程多种方法,join,detach

2021-01-31
阅读 5 分钟
5.3k
进程结束标志:主线程是否结束。如果主线程执行完毕,则代表整个进程结束,一般情况下此时如果还有其它子线程未执行完,则子线程会被强行终止(例外:detach)。

【C++并发与多线程】 1_并发基本概念及实现,进程、线程基本概念

2021-01-31
阅读 2 分钟
2k
以往计算机为单核CPU(中央处理器):某一时刻只能执行一个任务,由操作系统调度,每秒钟进行多次“任务切换”,这并不是真正的并发。同时任务切换需要保存与恢复任务上下文,存在时间开销。

【C++】 C++11 新特性-总结

2020-03-24
阅读 1 分钟
5.7k
系列文章整理于侯捷老师视频课程《C++新标准C++11/14》,在此感谢老师的辛勤付出。视频中不全面但较为深刻的整理了 C++11/14 的部分重要新特性,包括语言和标准库两部分,尤其是对新特性背后的原理进行分析。

【C++】 7_C++11 新特性-标准库篇

2020-03-23
阅读 22 分钟
2.1k
This header defines a series of classes to obtain type information on compile-time.

【C++】 6_C++11 新特性-标准库篇

2020-03-22
阅读 15 分钟
3k
容器 - 结构与分类 容器 array TR1 实现:[没有 ctor, 没有 dtor] {代码...} {代码...} G4.9 实现 文件:array {代码...} {代码...} 容器 hashtable Separate Chaining.虽然list是线性搜索时间,如果list够小,搜索速度仍然非常快。 上图当前篮子的数量为53([0-52],一般为vector),元素个数为6(元素代码hashcode[53, 55...

【C++】 5_C++11 新特性-标准库篇

2020-03-19
阅读 17 分钟
1.9k
Rvalue references are a new reference type introduced in C++0x that help solver the problem of unnecessary copying and enable perfect forwarding. When the right-hand side of an assignment is an rvalue, then the left-hand side object can 'steal' resource from the right-hand side object rather than...

【C++】 4_C++11 新特性-语言篇

2020-03-16
阅读 7 分钟
2.2k
变化的是 template parameter 参数个数(variable number) 利用参数个数递减的特性,实现递归函数调用。使用 function template完成

【C++】 3_C++11 新特性-语言篇

2020-03-10
阅读 13 分钟
3.2k
using-directive for namespace and using-declarations for namespace members

【C++】 2_C++11 新特性-语言篇

2020-03-08
阅读 11 分钟
4.3k
explicit explicit for ctors taking one argument 此关键字是一个声明说明符,只能应用于类内构造函数声明。 显式构造函数不能参与隐式转换。 文件:Test.cpp {代码...} 输出: {代码...} 说明:Complex c2 = c1 + 5; 编译器查找是否有函数可以被匹配调用,查找得到类内自定义实现 ' operator + ',但参数类型为 'const ...

【C++】 1_C++11 新特性-语言篇

2020-03-04
阅读 16 分钟
2.4k
Header files C++2.0 新特性包括语言和标准库两个方面,后者以 header files 形式呈现。 C++ 标准库的header files不带.h,例如: #include <vector> 新式 C header files 不带.h,例如: #include<cstdio> 旧式 C header files (带有.h) 仍可用,例如:#include <stdio.h> 编译器对 C++2.0 的支持 C++...

【数据结构】汇总 && 源码

2020-02-21
阅读 3 分钟
2.3k
使用面向对象理论、泛型编程思想、C++语言中重载、继承、接口、多态和模板等技术,实现相关的数据结构和常规算法,打造了一个可复用的数据结构类私有库。其中创建了线性表的顺序存储、数组、单/双向/循环链表、栈、队列、通用树、二叉树、图等模板;递归、排序、kmp、八皇后问题等算法的实现;顶层弗列、单一继承树、异...

【数据结构】80_最长不下降序列

2020-02-21
阅读 10 分钟
1.8k
使用数列中的元素和元素间的关系建立图模型 [重要] 图中顶点的附加数据为对应的数列元素值 图中的边按照如下方式建立 当数列中的某个元素与后序元素存在不下降关系时 从该元素对应的顶点到后继元素对应的顶点存在一条有向边 边的权值固定为 1

【数据结构】79_Folyd最短路径

2020-02-20
阅读 28 分钟
1.6k
定义一个 n 阶方阵序列: A-1, A0,..., An-1 其中: A-1[i][j] = Edge[i][j] Ak[i][j] = min{ Ak-1[i][j], Ak-1[i][k] + Ak-1[k][j]} k = 0, 1, ..., n-1

【数据结构】78_Dijkstra最短路径

2020-02-19
阅读 14 分钟
1.8k
参考:图论最短距离(Shortest Path)算法动画演示-Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德) 最短路径的概念 如果从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径不止一条,那么如何找到一条路径使得此路径各边上的权值总和达到最小? 问题 给定一个带权有向图 G 与起始顶点 v ,求从 v 到 G 中其它顶点的最...

【数据结构】77_Kruskal 算法生成最小生成树

2020-02-19
阅读 13 分钟
3k
参考:最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示 最小生成树的特征 选取的边是图中权值较小的边 所有边连接后不构成回路 问题 既然最小生成树关心的是如何选择 n-1 条边,那么是否可以直接以边为核心进行算法设计? 简单尝试 由 4 个顶点构成的图,选择 3 条权值最小的边 需要解决的问题 如何判断新选...

【数据结构】76_Pirm 算法生成最小生成树

2020-02-18
阅读 12 分钟
2k
参考:最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示 运营商的挑战 在下图标出的城市间架设一条通信线路 要求: 任意两个城市间都能够通信 将假设成本降至最低 问题:如何在图中选择 n-1 条边使得 n 个顶点间两两可达,并且这 n-1 条边的权值之和最小? 最小生成树 仅使用图中的 n-1 条边连接图中的 n 个...

【数据结构】75_图的深度优先遍历 (DFS)

2020-02-17
阅读 12 分钟
1.6k
原料:class LinkStack<T>; 步骤: 将起始顶点压入栈中 弹出栈顶顶点 v, 判断是否已经标记(比较:转2; 未标记:转3) 标记顶点, 并将顶点 v 的邻接顶点压入栈中 判断栈是否为空(非空:转2; 空:结束)

【数据结构】74_图的广度优先遍历(BFS)

2020-02-17
阅读 5 分钟
2.3k
图的选择 MatrixGraph vs ListGraph 如何选择 ? 时间复杂度的对比分析 小结论 MatrixGraph 适用于内存资源富足的场合(性能较好) ListGrap 适用于内存资源受限的场合 (节省空间) 图的遍历 从图中的某一顶点出发,沿着一些边访问图中的其它顶点,使得每个顶点最多被访问一次。 注:从某个顶点出发进行遍历,不一定能...

【数据结构】73_图的邻接链表法存储结构

2020-02-16
阅读 11 分钟
2.4k
邻接矩阵法中的残留问题 {代码...} MatrixGraph 无法动态 添加 / 删除 顶点!!! 资源耗费大;N = 1000, 邻接矩阵的体积为 4 * 1000 * 1000 字节;因此,图对象创建时的体积约为 4MB !!! 基本思想 为了进一步提高空间使用率,可以考虑使用链表替代数组,将邻接矩阵换为邻接链表。 邻接链表法 图中的所有顶点按照编号...

【数据结构】72_图的邻接矩阵法存储结构

2020-02-16
阅读 8 分钟
2.1k
基本思想 用一维数组存储顶点:描述顶点相关的数据 用二维数组存储边:描述顶点间的关系和权 邻接矩阵法 设图 A = (V, E) 是一个有 n 个顶点的图,图的邻接矩阵为 Edgen, 则: 注:解决工程问题时,习惯于对图中的每个顶点进行编号;当需要权值时,取 W 非空表示结点间有连接。 无向图邻接矩阵法 无向图的邻接矩阵是对称...

【数据结构】71_图的定义与操作

2020-02-15
阅读 3 分钟
1.8k
图的定义 图是由顶点集合(Vertex)及顶点间的关系集合(Edge)组成的一种数据结构 : Graph = (V, E) V = {X | X ∈ 某个数据对象} 是顶点的有穷非空集合E = {(x, y) | x, y ∈ V} 是顶点之间关系的有穷集合 图的分类 思考:G1,G2,G3,G4 都是图吗?有什么异同?可以继续分类吗? 无向边 顶点 x 和 y 之间的边没有方向,则...

【数据结构】70_二叉树的经典面试题分析

2020-02-14
阅读 11 分钟
1.7k
面试题 一 单结点删除描述:编写一个函数用于删除二叉树中的所有单度结点要求:结点删除后,其唯一的子结点替代它的位置 情形1:结点中包含指向父结点的指针 定义功能:delOdd1(node) 删除 node 为根结点的二叉树中的单度结点 编程实验:单度结点的删除 {代码...} 输出: {代码...} 情形2:结点中只包含左右孩子指针 定...

【数据结构】69_二叉树的线索化实现

2020-02-14
阅读 17 分钟
1.4k
将二叉树转换为双向链表的过程(非线性 → 线性) 能够反映某种二叉树的遍历次序(结点的先后访问次序) 利用结点的 right 指针指向遍历中的后继结点 利用结点的 left 指针指向遍历中的前驱结点

【数据结构】68_二叉树的比较与相加

2020-02-13
阅读 17 分钟
1.4k
SharedPointer<BTree<T>> clone() const 克隆当前树的一份拷贝 返回值为堆空间中的一颗新二叉树(与当前树相等)

【数据结构】67_二叉树的典型遍历方式

2020-02-13
阅读 12 分钟
1.2k
先序遍历 (Pre-Order Traversal) 中序遍历 (In-Order Traversal) 后序遍历 (Post-order Traversal)

【数据结构】66_二叉树结构的层次遍历

2020-02-13
阅读 17 分钟
9.5k
二叉树的遍历 (Traversing Binay Tree) 是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

【数据结构】65_二叉树中属性操作的实现

2020-02-12
阅读 9 分钟
1.3k
二叉树的属性操作 二叉树中结点的数目 定义功能: count(node) 在 node 为根结点的二叉树中统计结点数目 编程实验:二叉树中结点的数目 {代码...} 二叉树的高度 定义功能:height(node) 获取 node 为根结点的二叉树的高度 编程实验:二叉树的高度 {代码...} 二叉树的度数 定义功能:degree(node) 获取 node 为根结点的二...

【数据结构】64_二叉树中的结点删除与清除

2020-02-11
阅读 14 分钟
2.2k
基于数据元素值的删除 SharedPointer<Tree<T>> remove(const T &value); 基于结点的删除 SharedPointer<Tree<T>> remove(TreeNode<T> *node);

【数据结构】63_二叉树中的结点插入操作

2020-02-11
阅读 7 分钟
2.2k
插入新结点 bool insert(TreeNode<T> *node); bool insert(TreeNode<T> *node, BTNodePos pos); 插入数据元素 bool insert(const T &value, TreeNode<T> *parent); bool insert(const T &value, TreeNode<T> *parent, BTNodePos pos);