用C++一步步写算法Day_1
来源:互联网 发布:电脑文件整理软件 编辑:程序博客网 时间:2024/06/08 12:33
这是受到朋友推荐的一位神级人物博客的启发,开始有了继续学习C++的路径和方法,接下来的很长一段时间,我将通过从写简单的算法开始一步步学习和熟练C++语法和对所写代码的健壮性测试。结合《数据结构和算法分析C++》第三版作为参考。
数组查找算法,主函数是find(),用关键字template定义了类模板,尖括号中的内容相当于函数的参数列表,<变量类型 变量名称>, 这里用了不太容易混淆的typename代替别的类型,比如class。type就是我们自己定义的类型名称,也可以用T或Type。
当模板被调用时,type将被具体的类型值(int & string)代替,后面就使用了int代替了!在main.h中也要在声明前加上类模板开头。
用指针来实现数组元素的查找,提高了代码运行效率,首先定义头尾指针分别指向int数组的头和尾的地址:
start :0x7fff3c5297d0
end : 0x7fff3c5297f8
d0到f8 ,地址距离是40bit,int长度是4bit,所以数组长度是10,也就是length的值。注意我们用int定义的数组,其长度单位也是int,而地址显示是按位计算的!
下面我们在看下数组元素的地址,就清楚啦!
0 -> 0x7fff2dc8b520
1 -> 0x7fff2dc8b524
2 -> 0x7fff2dc8b528
3 -> 0x7fff2dc8b52c
4 -> 0x7fff2dc8b530
5 -> 0x7fff2dc8b534
6 -> 0x7fff2dc8b538
7 -> 0x7fff2dc8b53c
8 -> 0x7fff2dc8b540
9 -> 0x7fff2dc8b544
start -> 0x7fff2dc8b520
end -> 0x7fff2dc8b548
下面是我运行的完整代码:
main.h
#ifndef MAIN_H_#define MAIN_H_static void test1();static void test2();template<class type>int find(type array[], int length, type value);#endif
man.cpp
#include "main.h"#include <assert.h>#include <cstdio>#define FALSE 1#define TRUE 0template<typename type>int find(type array[], int length, type value){ if(NULL == array || 0 == length) return FALSE; type* start = array; type* end = array + length; while(start < end){ if(value == *start) return (start - array); start ++; } return FALSE;}static void test1(){ int array[10] = {0}; assert(FALSE == find<int>(NULL, 10, 10)); assert(FALSE == find<int>(array, 0, 10));}static void test2(){ int array[10] = {1, 2}; assert(0 == find<int>(array, 10, 1)); assert(FALSE == find<int>(array, 10, 10));}int main(){ test1(); test2(); return TRUE;}
- 用C++一步步写算法Day_1
- ios--c DAY_1
- DAY_1
- Day_1.
- Day_1
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用C#一步步写串口通信
- 用objective-c写2048算法
- 一步步写驱动--模块
- 一步步写驱动---cdev
- 从零开始一步步写LSTM
- [原创]一步步教你用brew写游戏 1 -磨刀不误砍柴工
- [原创]一步步教你用brew写游戏 2 -工欲善其事必先利其器
- webservice(一)简单的webservice实例
- zstu 4054 阅读理解2
- huawei
- 在/data/下创建文件的权限问题
- git branch的简单用法 http://www.oschina.net/question/54100_55379
- 用C++一步步写算法Day_1
- Bash 简介
- MSSQL操作
- Flex4+BlazeDS+Spring+Hibernate 整合(附源码)
- 喜欢并学习的相关课程
- android之webview使用-处理404等错误
- GIS 资源地址
- 中国电信的天翼宽带怎么样才能不用“中国电信无线宽带”客户端,通过普通的拨号方式直接拨号上网?
- 如何成为“10倍效率”开发者