如果你学习的第一门语言是python,可能和我当初一样,并没有什么特别的感受。但是,后面又学习了C++的话就会发现,python使用起来太方便了!C++的各种条条框框太多了!
作为动态语言,python不需要预先设定数据的类型,非常灵活,而代价就是运行速度慢。与之相反,C++是静态语言,需要声明变量、函数或者类的类型,然后才能定义。因为C++的变量、函数和类等需要声明和定义两个步骤,为了使代码看上去更有条理,可以把它们分成两个部分(.cpp文件)。另外,C++可能需要导入一些库,这些语句可以存放在头文件中(.h文件)。
至于其他函数和语句,python和C++很接近,但又略有不同。比较好的学习方法是相互翻译。比如把一段python代码翻译成C++代码。
本文分成3个部分,第一部分是把一段python代码翻译成C++,并且把C++代码分别存放在3个文件中,目的是比较两种语言在创建变量、函数方面的异同;第二部分则是把一个python类翻译成C++,目的是比较两种语言在创建类方面的异同;第三部分会推荐一些C++的学习资料,供你学习参考。
1 把python代码翻译成C++,并且保存在3个文件中
先来看一段python代码。这段代码表达的意思是,一辆无人车沿着一维道路行走,道路分成5个格子,格子涂成绿色或者红色。无人车在某个格子上停下,检测格子的颜色。无人车移动的距离用move表示。无人车对格子颜色的检测,以及移动的距离都存在误差。正确识别颜色的概率是pHit,错误识别的概率是pMiss;移动正确的距离的概率是pExact,多移动一格的概率是pOvershoot,少移动一格的概率是pUndershoot.
代码中有sense和move两个函数,sense用来识别无人车当前所处格子的颜色,并且计算位于每个格子的概率;move用来计算无人车移动后,位于每个格子的概率。
# 无人车停在每个格子里面的初始概率
p = [0.2, 0.2, 0.2, 0.2, 0.2]
# 创建一维道路
world = ['green', 'red', 'red', 'green', 'green']
# 无人车测量到的颜色
measurements = ['red', 'green']
# 无人车移动的距离
motions = [1,1]
# 正确识别颜色的概率
pHit = 0.6
# 错误识别颜色的概率
pMiss = 0.2
# 移动正确距离的概率
pExact = 0.8
# 多移动一格的概率
pOvershoot = 0.1
# 少移动一格的概率
pUndershoot = 0.1
# 识别当前格子的颜色,计算无人车位于每个格子的概率
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
# 归一化
s = sum(q)
for i in range(len(q)):
q[i] = q[i] / s
return q
# 移动后无人车位于每个格子的概率
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i-U) % len(p)]
s = s + pOvershoot * p[(i-U-1) % len(p)]
s = s + pUndershoot * p[(i-U+1) % len(p)]
q.append(s)
return q
# 无人车识别、移动两次后,位于每个格子的概率
for k in