• Essential C++ 3.1 节的代码练习——哨兵方式


    #include "IncrementArray.hpp"
    
    template <typename element> 
    element *find_address(element *array, int size, element &value)
    {
        if (! array || size < 1)
        {
            return 0;
        }
        for (int i = 0; i < size; ++i, ++array)
        {
            if ((*array) == value)
            {
                return array;
            }
        }
        return 0;
    }
    
    template <typename element> 
    element *use_sentinel(element *first_address, element *sentinel, element &value)
    {
        if (! first_address || ! sentinel)
        {
            return 0;
        }
        for (; first_address != sentinel; ++first_address)
        {
            if ((*first_address) == value)
            {
                return first_address;
            }
        }
        return 0;
    }
    
    int main()
    {
        cout << "Hello, Hal.
    ";
        string string_array[9] = {"hey", "hey", "you", "you", "I", "Don't", "Like", "Your", "Girlfriend"};
    
        vector<string> avril(string_array, string_array + 9);
        string who = "Girlfriend";
    
        cout << "I don't like your Girlfriend. I know her address: " << find_address(&(avril[0]), 9, who) << endl;
    
    
        int integer_array[4] = {1, 2, 3, 4};
        int four = 4;
        cout << "Where's 4? Oh, here it is: " << use_sentinel(&(integer_array[0]), &(integer_array[0]) + 5, four) << endl;
    
        int ia[8] = { 1, 1, 2, 3, 5, 8, 13, 21};
        double da[8] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0};
        string sa[4] = {"lim","aaa","ddd","dcc"};
    
        int *pi = use_sentinel(ia,ia+8,ia[3]);
        double *pd = use_sentinel(da,da+8,da[3]);
        string *ps = use_sentinel(sa, sa+4, sa[2]);
    
        cout << "ps=" << ps << " pd=" << pd << " pi=" << pi << endl;
    
        return 0;
    }

    输出:

    Hello, Hal.
    I don't like your Girlfriend. I know her address: 0x1b1b70
    Where's 4? Oh, here it is: 0x72fc6c
    ps=0x72fbb0 pd=0x72fc08 pi=0x72fc3c
     
    添加另一个函数:
    template <typename elemType>
    const elemType * find_ver5(const elemType *first,
                const elemType *last, const elemType &value )
    {
        if ( ! first || ! last )
            return 0;
    
        // while first does not equal last,
        // compare value with element addressed by first
        // if the two are equal, return first
        // otherwise, increment first to address next element
    
        for ( ; first != last; ++first )
            if ( *first == value )
                return first;
    
        return 0;
    }
    main函数中需要这么定义,加const。
    const
    int *pi = find_ver5(ia,ia+8,ia[3]);
    否则无法编译通过。
  • 相关阅读:
    超级小白使用pip安装第三方库的正确姿势
    selenium+python自动化测试--解决无法启动IE浏览器及报错问题
    microsoft edge浏览器安装驱动
    超详细MySQL安装及基本使用教程
    Navicat15最新版本破解 亲测可用!!!
    Ubuntu 16.04安装JMeter测试工具
    JMeter_Ubuntu上安装jmeter
    韩国vps推荐-kdatacenter
    全栈之js入门篇
    Web前端之CSS_day5
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/10992038.html
Copyright © 2020-2023  润新知