自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (5)
  • 收藏
  • 关注

原创 C++程序员应了解的那些事(12) C++强制类型转换 ( dynamic_pointer_cast/智能指针的类型转换 )

<1>智能指针的类型转换 C++ 中提供了四种强制类型转换操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast。 而关于shared_ptr 无法利用这些原始的操作符进行转换,其定义了自己的类型转换操作符:static_pointer_cast, dynamic_pointer_cast, const_pointer_cast 。 其用途跟非智能指针的cast意思相同:static_c...

2020-07-31 22:07:20 1732

原创 程序员应了解的那些事(11) operator[]和at使用上的区别

operator[]和at的主要区别在于operator[]不做边界检查,而at会做边界检查。 由于operator[]不做边界检查, 那怕越界了也会返回一个引用,当然这个引用是错误的引用,如何不小心调用了这个引用对象的方法,会直接导致应用退出。 而由于at会做边界检查,如果越界,会抛出异常,应用可以try catch这个异常,应用还能继续运行。 结论:使用at时应使用try catch包裹住;而使用operator[]时一定要先检查一下是否越界。...

2020-07-31 21:36:38 734

原创 程序员应了解的那些事(10)-为什么C++中空类和空结构体大小为1?

对于空结构体和空类大小是1这个问题,首先这是一个C++问题,在C语言下空结构体大小为0(当然这是编译器相关的)。这里的空类和空结构体是指类或结构体中没有任何成员。 在C++下,空类和空结构体的大小是1(编译器相关),这是为什么呢?为什么不是0? 这是因为,C++标准中规定,“no object shall have the same address in memory as any other variable” ,就是任何不同的对象不能拥有相同的内存地址。 如果空...

2020-07-28 21:50:36 226

原创 程序员应了解的那些事(9) STL vector:sizeof(vector)分析 + sizeof小结

【问题】int的大小是4,定义vector<int>vec,vec中有一个元素,sizeof(vec)=20,如果有1000个元素,则sizeof(vec)是多少?<写代码测试一下>#include <iostream>#include <vector>using namespace std;int main(){ vector<int> vec; for(int i=0;i<100;i++) { .

2020-07-28 21:06:16 2844 5

原创 C++程序员应了解的那些事(8) PIMPL模式(指向实现的指针)

【1】C++之善用PIMPL技巧解決/改善C++编码时常碰到的2大问题。(1)class增加private/protected成员时,使用此class的相关 .cpp(s) 需要重新编译。(2)定义冲突与跨平台编译。(1)class增加private/protected成员时,使用此class的相关 .cpp(s) 需要重新编译。 假设我们有一个A.h(class A),并且有A/B/C/D 4个.cpp引用他,他们的关系如下图: 如果A class增加了pri...

2020-07-27 22:01:21 794 1

原创 C++程序员应了解的那些事(7)虚函数的访问控制

<1>注意:基类的指针不能调用派生类自己定义的函数,只能调用虚函数!因为调用普通函数时是绑定静态的,调用虚函数时才动态绑定。为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:对象的静态类型:对象在声明时采用的类型,是在编译期确定的。对象的动态类型:目前所指对象的类型,是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。 静态绑定:绑定的是对象的静态类型,某特性(...

2020-07-27 20:46:15 322

原创 程序员应了解的那些事(6)C++类中的数据成员能否在定义类的时候就初始化?/类的数组不能使用成员初始化表进行初始化等

【问题1】C++类中的数据成员能否在定义类的时候就初始化?(注:在最新的C++11标准中已经支持在定义类的时候进行成员初始化。但初始化不是在编译时发生,这只是语法糖,而成员变量是在默认构造函数中初始化的) 如前所述,它是语法糖。但由于规则可能太难记住,通过一个逻辑实验来验证:struct foo { int size = 3; };template<int N>struct experiment { enum { val = N }; }; 假设初始化发生在编译时,然

2020-07-26 16:41:01 1695

原创 程序员应了解的那些事(5)C++迭代器之iterator_traits/iterator_category

<1>traits所谓traits,可以理解为“萃取机”。作用就是:你丢给他什么东西,他会给你拿出你想要的特性。迭代器的特性:iterator_traits<><2>迭代器的属性迭代器是沟通算法和容器的桥梁。一方面让算法知道所要处理的范围,另一方面可以取出容器中的数据。以rotate算法为例,我们来看看算法需要迭代器的哪些属性。1、iterator_category:根...

2020-07-23 20:09:45 648 1

原创 C++规范编码引涉语法点之(8)普通枚举+强类型枚举

【普通枚举/非领域枚举】(1)枚举量的声明和定义①首先,请看下面的语句:enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};这句话有两个作用:第一:声明enumType为新的数据类型,称为枚举(enumeration);第二:声明Monday、Tuesday等为符号常量,通常称之为枚举量,其值默认分别为0-6。②接着利用新的枚举类型enumType声明这种类型的变量:enumType We.

2020-07-22 21:09:25 416

原创 C++规范编码引涉语法点之(8)trivial和non-trivial构造/析构/复制/赋值函数 及POD类型

【trivial/non-trivial】trivial意思是无意义,这个trivial和non-trivial是对类的四种函数来说的:构造函数(ctor)复制构造函数(copy)赋值函数(assignment)析构函数(dtor)如果至少满足下面3条里的一条:(1)显式(explict)定义了这四种函数。(2)类里有非静态非POD的数据成员。(3)有基类。 那么上面的四种函数是non-trivial函数,比如叫non-trivial ctor、non-trivial copy...

2020-07-22 19:58:39 950 1

原创 程序员应了解的那些事(4)求递归算法的时间复杂度

(一)递归树法<1>计算递归式T(n)=2T(n/2)+n^2的时间复杂度。 考虑递归式: T(n)=2T(n/2)+n^2 可将其化为: T(n)=T(n/2)+T(n/2)+n^2 于是可以画一棵递归树,对于一个节点,节点的值为非函数项,再将式中每一个函数项向下迭代,式中有几个函数项,递归树就是几叉树,且有logn层,把每一行所有节点的和写在右边,如下图所示: 然后,右边所有数之和(一个含n的表达式)...

2020-07-19 20:43:40 6336

原创 程序员应了解的那些事(3)快速排序算法图解

有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦! 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(也称为本趟分割中的主元/枢轴/支点)。为了方便就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2 5 4 6 9 7 10 8 在初始状态下,数字6在序列的第1位...

2020-07-17 22:37:19 176

原创 树:表达式树与前中后缀表达式

计算机科学中,除了栈以外,二叉树也是处理表达式的常用工具,为了处理表达式而遵循相应规则构造的树被称为表达式树表达式树: 算数表达式是分层的递归结构,一个运算符作用于相应的运算对象,其运算对象又可以是任意复杂的表达式。树的递归结构正好用来表示这种表达式。下面只讨论二元表达式。二元表达式可以很自然的联系到二叉树:以基本运算对象作为叶节点中的数据;以运算符作为非叶节点中的数据,其两棵子树是它的运算对象,子树可以是基本运算对象,也可以是复杂表达式。如图是一个表达式树。前缀...

2020-07-16 22:52:43 1738

原创 程序员应了解的那些事(2)时空复杂度---O(1)/O(n)/O(n^2)/O(log n)/O(n log n)是什么意思

这些都是算法时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。 O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。O(1)解析: O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话),冲突的话很麻烦的,指向的value会做二次has...

2020-07-16 21:53:28 201

原创 已知前序遍历序列和后序遍历序列,不能确定一棵二叉树!

【结论】:已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树 已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树 但是已知前序遍历序列和后序遍历序列,是不能确定一棵二叉树的 即:没有中序遍历序列的情况下是无法确定一颗二叉树的【例题】下面例子通过前序遍历和中序遍历确定唯一的一棵二叉树。 前序遍历:EACBDGF 中序遍历:ABCDEFG1、首先根据前序遍历找出根节点是E,然后...

2020-07-16 20:31:49 12308 3

原创 程序员应了解的那些事(1)大小端、网络字节序、LSB,MSB

<1>大小端的概念大小端的问题主要是由计算机内存中多字节形数据类型的存在而引起的,他的研究单位是字节,对于char行数据类型,就是一个字节,八位,是不存在大小端问题的;但是对于short、int、float等数据类型,表示一个数据需要多个字节,那么这多个字节之间的顺序就十分重要了。Big-Endian和Little-Endian的定义如下:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Big-Endian就是高位字节排放在内存的低地址端,低位字节

2020-07-15 23:05:20 1042

原创 C++规范编码引涉语法点之(7)静态分配和动态分配/堆和栈

【1】内存的静态分配和动态分配的区别主要是两个: 一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。 二是空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由函数malloc进行分配。不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需我们手工实现。【2】对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。 ...

2020-07-13 23:13:22 400

原创 完全二叉树与满二叉树的区别+计算二叉树深度

1、完全二叉树与满二叉树的区别:满二叉树:深度为k且有2^k-1个结点的二叉树称为满二叉树。完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。2、计算二叉树的深度:满二叉树的深度为k=log2(n+1)在完全二叉树中,具有n个结点的完全二叉树深度为(log2n)+1,其中(log2n)+1是向下取整。计算完全二叉树深度公式-推导证明:假设两种极端情况<1>该树为满二叉树时...

2020-07-13 22:26:28 7316 1

原创 什么是类型安全,C/C++是类型安全的吗?

【1】首先:C/C++不是类型安全的语言。类型安全是指同一段内存在不同的地方,会被强制要求使用相同的办法来解释(内存中的数据是用类型来解释的)。//类型安全性意味着编译器将在编译时验证类型,如果尝试将错误的类型分配给变量,则抛出错误。Java语言是类型安全的,除非强制类型转换。C语言不是类型安全的,因为同一段内存可以用不同的数据类型来解释,比如1用int来解释就是1,用boolean来解释就是true。------------------------------------------------

2020-07-13 22:12:15 5415

原创 C++规范编码引涉语法点 之(6)在构造函数和析构函数中,在function-try-block的处理程序中捕获的异常必须重新抛出

<1>写出下面代码并分析存在的问题#include<iostream>using namespacestd;class BaseClass{ public: BaseClass() { }};class MyClass:public BaseClass{private: char*ptr;public: MyClass();};MyClass::MyClass():BaseClass(),ptr(newchar

2020-07-11 10:33:37 273

原创 C/C++软件开发笔试题集锦

1、(多选)下面关于哈夫曼树的描述中,错误的是(ABD)A、哈夫曼树一定是完全二叉树B、哈夫曼树一定是平衡二叉树C、哈夫曼树中权值最小的两个节点互为兄弟节点(正确)D、哈夫曼树中左孩子节点小于父节点,右孩子节点大于父节点。(错误,右孩子节点也小于父节点)2、(判断)对于整数n,(n&(n-1))==0的函数是判断n是否为偶数。F-------判断n是否为2的X次方(乘方的结果叫做幂。在a^n中,a叫做底数,n叫做指数。a^n读作“a的n次方”或“a的n次幂“。)...

2020-07-09 22:52:17 3962

原创 (n&(n-1))==0的具体含义及应用扩展

<1>【(n&(n-1))==0含义解析】检查n是否为2的n次方 (n&(n-1))==0表示n和n-1不存在同一位均为1的情况:<2>【n & n-1 应用】n & n-1 会把数字中最后等于1 的数字抹掉1100 & 1011 == 1000 把第二位上的1 给去掉了1011 & 1010 == 1010 最后一位的0抹掉了利用这点我们可以如下应用<1>...

2020-07-09 20:22:18 2019

原创 C++规范编码引涉语法点 之(5)不要在STL容器中存储 auto_ptr 对象 & auto_ptr的缺陷

【导入】使用auto_ptr类的限制(auto_ptr的缺陷)1)不要使用auto_ptr对象保存指向静态分配对象的指针,否则,当auto_ptr对象本身被撤销的时候,它将试图删除指向非动态分配对象的指针,导致未定义的行为。2)永远不要使用两个 auto_ptrs 对象指向同一对象,导致这个错误的一种明显方式是,使用同一指针来初始化或者 reset 两个不同的 auto_ptr对象。另一种导致这个错误的微妙方式可能是,使用一个 auto_ptr 对象的 get 函数的结果来初始化或者 reset另一个

2020-07-09 19:56:26 354

原创 C/C++指针极简入门

1. 初识指针 简单来说,指针是一种特殊的变量。特殊在于,这种变量存储的不是普通值(比如1,2,100,‘q’);它存储的是内存地址,比如0x101、0x886等。 我们都知道,变量的存储是需要占用内存空间的。 图中,Age是一个变量,它的存放地址是0x886,存放的值是18。 pAge是一个指针,也可以说是一个特殊的变量。它的存放地址是0x601,存放的内容是0x886。对比,很容易发现,指针和变量有很多相似之处;不同之处在于,指针存放的是内存...

2020-07-08 21:33:18 159

原创 linux建立或调整swap分区(centor os 验证)

安装Linux系统在分区时可以分配swap分区,而系统安装后(在运行中)如何建立或调整swap分区呢?在装完Linux系统之后,建立Swap分区有两种方法。1.新建磁盘分区作为swap分区2.用文件作为swap分区 (操作更简单)下面介绍这两种方法:(都必须用root权限,操作过程应该小心谨慎)一、新建磁盘分区作为swap分区1.以root身份进入控制台(登录系统),输入# swapoff -a #停止所有的swap分区2. 用fdisk命令(例:# fdisk /dev/sd...

2020-07-02 21:18:27 371

原创 C++11中的std::call_once 使用举例 + 实现Singleton模式程序示例

某些场景下,我们需要代码只被执行一次,比如单例类的初始化,考虑到多线程安全,需要进行加锁控制。C++11中提供的call_once可以很好的满足这种需求,使用又非常简单。#include<mutex>template <class Fn, class... Args>void call_once (once_flag& flag, Fn&& fn, Args&&...args); 第一个参数是std...

2020-07-01 22:20:27 2452

预加重与去加重.doc

预加重(Pre-emphasis):发送端对输入信号高频分量的提升。 去加重(De-emphasis) :解调后对高频分量的压低。

2020-07-12

XX厂宽带集群解决方案.pdf

行业专网技术的发展  随着对应急抢险的及时性和准确性要求越来越高, 对指挥决策系统来说,迫切需要包括视频、语 音、数据等多媒体并发通信手段,做到决策正确,指挥高效。  应急系统宽带化、多媒体化的需求越来越强烈,将成为下一代宽带应急系统的发展方向。

2020-07-12

实验室硬件设计开发导入.pptx

实验室硬件平台概述 PCB基础概念 Altium Designer 软件使用基础 板子组成结构与功能介绍 电路板调试基本思路与方法 焊接台规则

2020-07-12

数字滤波器,数字滤波器原理是什么.docx

在信号处理领域中,对于信号处理的实时性、快速性的要求越来越高。而在许多信息处理过程中,如对信号的过滤、检测、预测等,都要广泛地用到滤波器。其中数字滤波器具有稳定性高、精度高、设计灵活、实现方便等许多突出的优点,避免了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题,因而随着数字技术的发展,用数字技术实现滤波器的功能越来越受到人们的注意和广泛的应用。

2020-07-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除