c++函数设计变量的合法性使用断言



在函数 或 代码 前后 判断参数 或 变量的合法性

方法:使用断言 assert

作用:用来检查一些必须符合的条件,捕捉 “不应该” 发生的非法情况,如果不符合条件,则不让程序继续运行下去。

使用时间 &  位置:

前置条件断言:代码执行之前 或 在函数的入口处,使用断言检查 参数 的合法性。

断言执行:表示调用者出错了

后置条件断言:代码执行之后 或 在函数的出口处,使用断言检查 参数 是否正确执行

断言执行:表示代码执行完后,参数的值 出现了 不可能出现的值

前后不变断言:代码执行前后 或 在函数的入出口处,使用断言检查参数是否发生变[......]

Read more

c++函数设计规则注意事项(1)



c++函数设计规则注意事项(1)

6.1 参数的规则

【规则6-1-1】参数的书写要完整,如果函数没有参数,则用void 填充

  1. void SetValue(int width, int height); // 良好的风格
  2. float GetValue(void); // 良好的风格
  3. void SetValue(int, int); // 不良的风格
  4. float GetValue(); // 不良的风格

【规则6-1-2】参数命名要有意义,顺序要合理。

拷贝函数:一般地,应将目的[......]

Read more

c++表达式和基本语句

c++表达式和基本语句。

与零值比较

4.3.1 布尔变量与零值比较

[cpp] view plaincopy

  1. //直接使用变量名判断
  2. 推荐风格
  3. if (flag) // 表示flag 为真
  4. if (!flag) // 表示flag 为假
  5. 不良风格
  6. if (flag == TRUE)
  7. if (flag == 1 )
  8. if (flag == FALSE)
  9. if (flag == 0)

4.3.2 整型变量与零值比较

[cpp] view plaincopy

  1. //用“==”[......]

Read more

荷兰国旗问题、矩阵相乘之Strassen算法

荷兰国旗问题、矩阵相乘之Strassen算法。

  1. 第十一章荷兰国旗问题
    1. 题目描述
    2. 思路分析
    3. 解法一partition分治
  2. 第四十二章矩阵相乘之Strassen算法
    1. 题目描述
    2. 思路分析
    3. 解法一暴力解法
    4. 解法二Strassen算法
    5. 解法三持续优化
    6. 本文要讲的两个问题:荷兰国旗和矩阵相乘之Strassen算法都跟分治法相关,故把这两个问题放到了一起。所谓分治,便是分而治之的意思,好比打战时面对敌人庞大的武装部队,采取避其主力,各个击破的策略。

      有何问题,欢迎随时不吝指正,thanks。

       

      第十一章、荷兰国旗问[......]

Read more

程序员如何快速准备面试中的算法问题

程序员如何快速准备面试中的算法问题?

目录(?)[-]

  1. 程序员如何快速准备面试中的算法
    1. 前言
    2. 备战面试中算法的五个步骤
    3. 后记

    程序员如何快速准备面试中的算法

 

前言

之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示:

   

但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料。顺便也供节后跳槽、3月春季招聘小高潮、及6月毕业找工作的朋友[......]

Read more

c++数据结构与算法之堆

c++数据结构与算法之堆。

1. 概述

堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。

2. 堆的基本操作

堆是一棵完全二叉树,高度为O(lg n),其基本操作至多与树的高度成正比。在介绍堆的基本操作之前,先介绍几个基本术语:

A:用于表示堆的数组,下标从1开始,一直到n

PARENT(t):节点t的父节点,即floor(t/2)

RIGHT(t):节点t的左孩子节点,即:2*t

LEFT(t):节点t的右孩子节点,[......]

Read more

c++数据结构之Treap

c++数据结构之Treap。1. 概述

同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap可以并不一定是。

2. Treap基本操作

为了使Treap 中的节点同时满足BST性质和最小堆性质,不可避免地要对其结构进行调整,调整方式被称为旋转。在维护Treap 的过程中,只有两种旋转,分别是左旋转(简称左旋)和右旋转(简称右旋)。

左旋一[......]

Read more

c++算法之排序算法教程

c++算法之排序算法教程。

1. 概述

排序算法是计算机技术中最基本的算法,许多复杂算法都会用到排序。尽管各种排序算法都已被封装成库函数供程序员使用,但了解排序算法的思想和原理,对于编写高质量的软件,显得非常重要。

本文介绍了常见的排序算法,从算法思想,复杂度和使用场景等方面做了总结。

2. 几个概念

(1)排序稳定:如果两个数相同,对他们进行的排序结果为他们的相对顺序不变。例如A={1,2,1,2,1}这里排序之后是A = {1,1,1,2,2} 稳定就是排序后第一个1就是排序前的第一个1,第二个1就是排序前第二个1,第三个1就是排序前的第三个1。同理2也是一样[......]

Read more

c++数据结构之AVL树

c++数据结构之AVL树。1. 概述

AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。本文介绍了AVL树的设计思想和基本操作。

2. 基本术语

有四种种情况可能导致二叉查找树不平衡,分别为:

(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2[......]

Read more

数据结构之位图图文教程

数据结构之位图图文教程。1.  概述,位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。

2. 位图实现

(1)自己实现

在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
4[......]

Read more