用C++一步步写算法Day_1

简介:           这是受到朋友推荐的一位神级人物博客的启发,开始有了继续学习C++的路径和方法,接下来的很长一段时间,我将通过从写简单的算法开始一步步学习和熟练C++语法和对所写代码的健壮性测试。

          这是受到朋友推荐的一位神级人物博客的启发,开始有了继续学习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 0

template<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;
}
目录
相关文章
|
5天前
|
缓存 负载均衡 算法
C++如何实现一致性算法
一致性哈希是一种用于分布式系统的负载均衡算法,旨在减少服务器增减导致的数据迁移。当有N台服务器时,通过哈希环将请求均匀分布到每台服务器,每台处理N/1的请求。若使用缓存如Redis,可进一步处理高并发场景。算法将哈希值空间视为环形,服务器和请求哈希后定位到环上,按顺时针方向找到第一台服务器作为负载目标。提供的C++代码实现了MD5哈希函数,以及一致性哈希算法的物理节点、虚拟节点和算法本身,以实现节点的添加、删除和请求映射。
14 1
C++如何实现一致性算法
|
11天前
|
算法 C++
c++算法学习笔记 (21) STL
c++算法学习笔记 (21) STL
|
11天前
|
算法 C++
c++算法学习笔记 (20) 哈希表
c++算法学习笔记 (20) 哈希表
|
11天前
|
算法 C++
c++算法学习笔记 (19) 堆
c++算法学习笔记 (19) 堆
|
11天前
|
人工智能 算法 C++
c++算法学习笔记 (18) 约数
c++算法学习笔记 (18) 约数
|
12天前
|
人工智能 算法 C++
c++算法学习笔记 (17) 质数
c++算法学习笔记 (17) 质数
|
12天前
|
算法 C++
c++算法学习笔记 (16) 并查集
c++算法学习笔记 (16) 并查集
|
12天前
|
算法 C++
c++算法学习笔记 (15) 单调栈与单调队列
c++算法学习笔记 (15) 单调栈与单调队列
|
12天前
|
算法 C++
c++算法学习笔记 (14) 栈与队列
c++算法学习笔记 (14) 栈与队列
|
12天前
|
算法 C++
c++算法学习笔记 (13) 链表
c++算法学习笔记 (13) 链表