#include "IncrementArray.hpp"

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

输出:

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 ; // 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 ;
}
main函数中需要这么定义,加const。
const int *pi = find_ver5(ia,ia+,ia[]);
否则无法编译通过。

Essential C++ 3.1 节的代码练习——哨兵方式的更多相关文章

  1. Essential C++ 3.1 节的代码练习——指针方式

    // // PointerToValue.cpp // Working // // Created by Hawkins, Dakota Y on 6/3/16. // Copyright 2016 ...

  2. Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如 ...

  3. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  4. java 22 - 9 多线程之 代码实现的方式2

    多线程的代码实现: 方式2:实现Runnable接口 步骤: A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Threa ...

  5. Entity Framework入门教程(18)---EF6中基于代码进行配置方式

    EF6中基于代码进行配置方式 我们以前对EF进行配置时是在app.config/web.config下的<entityframework>节点下进行配置的,EF6引进了基于代码的配置方法. ...

  6. 实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

    使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程 ...

  7. 4.3.6 对象的界定通过编写接口来访问带这类命名结构的表会出问题。如前所述,SQL Server的灵活性不应用作编写错误代码或创建问题对象的借口。 注意在使用Management Studio的脚本工具时,SQL Server会界定所有的对象。这不是因为这么做是必须的,也不是编写代码的最佳方式,而是因为在界定符中封装所有的对象,比编写脚本引擎来查找需要界定的对象更容易。

    如前所述,在创建对象时,最好避免使用内嵌的空格或保留字作为对象名,但设计人员可能并没有遵守这个最佳实践原则.例如,我当前使用的数据库中有一个审核表名为Transaction,但是Transaction ...

  8. IntelliJ IDEA设置代码括号对齐方式

    IntelliJ IDEA设置代码括号对齐方式 IntelliJ IDEA默认的对齐方式如下:括号跟函数名在一行 想改为括号独自占一行,如下: 配置方式如下:File->Setting-> ...

  9. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

随机推荐

  1. SQLServer2008 开启远程连接

    关闭防火墙 基本的设置可以参考下面的链接: http://wenku.baidu.com/link?url=qjZKZCCoa5T3EGd_rqSjl6Tuhb1wYjIHyXri630QxuAIKu ...

  2. Vmware 可用的激活码

    4F207-8HJ1M-WZCP8-000N0-92Q6G 0A6Z5-8H1EJ-WZCL1-PK072-23DJG 0F0Q9-8F38L-RZXT9-4U054-ACW5F JA02E-09H4 ...

  3. [Java][Liferay] 解决Liferay ext项目deploy的问题

    Liferay ext project在install war包之后需要重启服务器,重启服务器中会执行ExtHotDeployListener中的逻辑,这里有一个坑,如果是第二次以后install e ...

  4. DockerSwarm 微服务部署

    一.简介 之前<服务Docker化>中,使用 docker-compose.yml 来一次配置启动多个容器,在 Swarm 集群中也可以使用 compose 文件 (docker-comp ...

  5. python之re模块和正则表达式

    今天我们来谈谈python中模块的使用,在探讨模块前先来了解一下正则表达式的具体用法. 1.正则表达式 正则表达式就是匹配 字符串内容的一种规则.谈到正则就和字符串相关了,首先我们要知道什么是字符组. ...

  6. JS转换日期格式

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  7. Cocos2d-x v3.1 安装图文教程(二)

       Cocos2d-x v3.1 安装图文教程(二) 如果我们需要在Android平台上运行就必须安装android的SDK,如果我们只想在window上运行就只需要安装Cocos2d-x就行了.当 ...

  8. Unity调用外部摄像头,全屏显示摄像头画面

    有两种方法,常用的是GUI方法,代码如下: public class CameraTest : MonoBehaviour { WebCamTexture camTexture; void Start ...

  9. 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时

    1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间: 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时 ...

  10. 基于jeesit下的工作流开发步骤

    首先jeesit是开源的OA系统,采用的框架是springMVC和mybatis,采用shiro安全验证. 1.新建流程所属表: 在数据库新建所需工作流的表之后,登录jeesit系统,在“代码生成”- ...