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

Posted codeworkerliming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.\n";
    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]);
否则无法编译通过。

以上是关于Essential C++ 3.1 节的代码练习——哨兵方式的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 练习题 1

C++ Primer 0x07 练习题解

python 在Google的Foobar挑战中尝试练习级别3.1“查找访问代码”失败。

python 在Google的Foobar挑战中尝试练习级别3.1“查找访问代码”失败。

基于opecv 3.1的图像模糊识别c++代码

C++ 入门学习(练习+代码)—— 02