#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. MS Chart 折线图——去除时间中的时、分、秒,按天统计【转】

    MS Chart 折线图——去除时间中的时.分.秒,按天统计   private void Form2_Load(object sender, EventArgs e){            str ...

  2. cd进入相关目录的命令

    今天不记得怎么进入Linux的根目录了,查询了下顺便复习下其他命令: 1.[root@localhost]#cd /usr 切换至根目录下的文件夹要加"/" 2.[root@loc ...

  3. Centos_linux系统的区别及实际查看

    在Linux系统查看系统版本为 32 位还是 64 位 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [ ...

  4. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:6.技术简介之Protobuf

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 protocolbuffer(以下简称Protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平 ...

  5. Entity Framework --Entity SQL注意事项

    Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...

  6. linux 链接的使用 创建和删除符号连接

    1 . 使用方式 :ln [option] source_file dist_file                     -f 建立时,将同档案名删除.                     ...

  7. java常用框架总结

    一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...

  8. [Rails学习之路]Rails文件结构与路由

    约定优于配置和RESTful是Ruby on Rails十分推崇的哲学.在一个默认的RESTful的Rails项目中,使用资源和HTTP动词来帮助组织项目. 假如有一个使用scaffold创建的Rai ...

  9. [Rails学习之路]初识Ruby(二)

    继续上次Ruby的学习.接下来就到了Ruby的方法. Ruby的方法与Python仍然很像.使用def定义,可以使用undef取消定义. 在Ruby中,经常可以看见方法后面跟有"?" ...

  10. ShopNC B2B2C多用户商城网站系统源码

    直接正常安装就行哦 注意有服务器的安装可以更下安装时间的长度 也就是说进行跳转的 如果时间太少 这样会安装不成 数据导入不完成 所以就会安装不成功安装好后打开data\config\config.in ...