编程语言与数据结构
lucas1997
这个作者很懒,什么都没留下…
展开
-
Effective C++part 5 实现
文章目录尽可能延后变量定义式的出现时间尽量少做转型动作尽可能延后变量定义式的出现时间当定义一个变量而其类型带有一个构造函数或析构函数,当程序的控制流(control flow)到达这个变量定义式时,就要承担构造成本,离开作用域时,就要承担析构成本。即使这个变量没有被使用。例如:std::string encryptPassword(const std::string& password){ using namespace std; string encrypted; if原创 2020-12-19 15:18:43 · 236 阅读 · 0 评论 -
Effective C++第四部分 设计与声明
文章目录让软件可以被正确使用,不易被误用像设计type一样设计Class让软件可以被正确使用,不易被误用接口开发首先需要考虑客户可能做出什么样的错误假设设计一个表现日期的classclass Date {public: Date(int month, int day, int year); ...};该类第一可能以错误的次序传递参数,第二可能传递一个无效的月份或天数许多客户端错误可以因为导入新类型而获得预防, 因此可以导入外覆类型(wrapper types)来区别天数、月份和原创 2020-12-04 15:54:17 · 346 阅读 · 0 评论 -
Effective C++ 第三部分 资源管理
使用的资源就必须还给系统, 常见的资源:内存, 文件描述器(file descriptors)、互斥锁(mutex locks)、网络sockets、图形界面中的字型和笔刷、数据库连接。以对象管理资源把资源放入对象中,这样就可以使用C++的“析构函数自动调用机制”确保资源被释放。许多资源被动态分配于heap内而后被用于单一区块或函数内,他们应该再控制流离开那个区块或函数时被释放。标准程序库提供的auto_ptr正是针对这种形式设计的特制产品, auto_ptr是一个“类指针(pointer-like)”原创 2020-11-26 16:30:07 · 226 阅读 · 0 评论 -
Effective C++学习笔记 Part2 构造/析构/赋值运算
Effective C++ Part 2了解C++默默编写并调用了哪些函数不想使用编译器自动生成函数, 明确拒绝为多态基类声明virtual析构函数不让异常逃离析构函数不在构造和析构过程中调用virtual函数operator=返回一个reference to *this在operator= 中处理“自我赋值”复制对象勿忘其每一个成份了解C++默默编写并调用了哪些函数一个空类会声明的函数:copy构造函数, copy assignment操作符、析构函数如果没有声明构造函数:编译器声明默认的defau原创 2020-11-21 20:51:09 · 161 阅读 · 2 评论 -
如何加快Dijkstra算法的运行速度?
如何加快Dijkstra算法的运行速度?在Dijkstra算法中,面对单源单目标的最短路径,如果遇到了要relax的节点u就是目标节点t,显然就可以执行结束了。Dijkstra算法Dijkstra算法的探索路径是从源一直往目标前景,那么加速它的一个角度就是从源开始探索的时候,同时从目标点向源开始探索,这种算法即Bi-Directional Search。Bi-Directional Search具体操作位,从源点和从目标两个方向均开始搜索,轮流的执行。两个方向的搜索意味着,在初始化的时候将有两个路转载 2020-11-21 18:42:25 · 417 阅读 · 0 评论 -
拓扑排序入门
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。一直做改操作,直到所有的节点都被分离出来。如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。下面是算法的演示过程。下面是我以前的写法,比较好理解,但是效率低 //b[]为每个点的入度for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(转载 2020-11-21 16:01:39 · 109 阅读 · 0 评论 -
MIT CS6.006 最短路径专题
单源最短路径·找出一个带权有向图从起点到终点权重和最小的路径。几个变体:1.单目的地最短路径问题2.单结点对最短路径问题3.所有节点对最短路径问题一个隐藏的重要性质:两个节点之间的一条最短路径也包含着其它的最短路径,也就是说,最短路径的子路径也是最短路径一般性,我们可以假定找到的最短路径中没有环路,即他们都是简单路径,由于图G=(V, E)中任意无环路径最多包含|V|个不同的节点,所以它至多包含|V-1|条边。因此最短路径至多是|V-1|。松弛操作(relaxation)对一条边(u,原创 2020-11-18 17:43:12 · 240 阅读 · 0 评论 -
C++ 指针和引用的异同点
相同点:都是地址的概念:指针指向一块内存,他的内容是所指内存的地址,引用是某块内存的别名不同点:指针是一个实体,而引用仅仅是一个别名 在使用时候引用无需解引用,而指针需要解引用(*) 指针只能在定义时别初始化一次,之后不可在变,指针一般可变(除非常量指针) 引用不能为空而指针可以为空 “sizeof引用”得到的是所指向的对象的大小,而“sizeof指针”得到的是指针本身的大小联系:引用在语言内部使用指针来实现的 对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了原创 2020-11-16 21:17:37 · 111 阅读 · 0 评论 -
C++ NULL和nullptr区别
在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有二义性的问题,为了弄明白这个问题,我查找了一些资料,总结如下。一、C程序中的NULL在C语言中,NULL通常被定义为:#define NULL ((void *)0)所以说NULL实际上是一个空指针,如果在C语言中写入以下代码,编译是没有问题的,因为在C语言中把空指针赋给int和char指针的时候,原创 2020-11-16 10:06:30 · 246 阅读 · 0 评论 -
LeetCode 137. Single Number II Python使用字典统计列表中数字个数
该题实际上有两种解法。第一是使用Python的字典计数即可,第二种方法则是按位计算。借这个机会记录一下使用字典统计列表中数字个数的一些方法方法一:利用字典的get函数,get表示根据字典的key取它的value值,如果该key不存在,则value值会默认为get的第二个参数。values=[1,2,3,2,3,1,4]values_cnt={}for value in values...原创 2020-03-17 11:51:47 · 457 阅读 · 0 评论