C++程序设计:原理与实践(进阶篇)15.9 调整内置数组达到STL版本的功能

15.9 调整内置数组达到STL版本的功能


我们之前反复指出内置数组的不足之处:它们动不动就会隐式转换成指针,它们不能通过赋值操作进行拷贝,它们不知道自己的大小(见13.6.2节),等等。我们也指出了它们最大的优点:它们近乎完美地利用了物理内存。

为了综合二者之长,我们可以创建一个具有数组优点而没有其不足的array容器。array的一个版本已经作为技术报告的一部分引入C++标准中。由于技术报告中的特性并不要求所有C++实现都必须包含,因此你所使用的实现可能并不包含array。但其思路是简单有用的:

 

这个定义并不完整,也不完全符合C++标准,但可展示设计思想。如果你使用的C++实现并未提供标准array,它也可提供一个有用的定义。如果C++实现提供了标准array,它应该在<array>中。注意由于array<T, N>“知道”它的大小为N,我们可以提供(我们也确实提供了)赋值==、!=等操作,就像vector一样。

作为一个示例,我们把array和15.4.2节中STL版high()结合起来使用:

 

 

注意当我们编写high()时,并没有考虑array。之所以high()可以与array一起使用是因为这二者都是按照标准的习惯进行定义的。

时间: 2024-10-03 06:54:32

C++程序设计:原理与实践(进阶篇)15.9 调整内置数组达到STL版本的功能的相关文章

15.9 调整内置数组达到STL版本的功能

15.9 调整内置数组达到STL版本的功能 我们之前反复指出内置数组的不足之处:它们动不动就会隐式转换成指针,它们不能通过赋值操作进行拷贝,它们不知道自己的大小(见13.6.2节),等等.我们也指出了它们最大的优点:它们近乎完美地利用了物理内存. 为了综合二者之长,我们可以创建一个具有数组优点而没有其不足的array容器.array的一个版本已经作为技术报告的一部分引入C++标准中.由于技术报告中的特性并不要求所有C++实现都必须包含,因此你所使用的实现可能并不包含array.但其思路是简单有用

C++程序设计:原理与实践(进阶篇)15.8 调整vector类达到STL版本的功能

15.8 调整vector类达到STL版本的功能 在15.5节中为vector增加了begin().end()和类型别名后,现在只差insert()和erase()就接近我们设计一个std::vector的近似版本的目标了:   我们还是使用指向元素类型的指针T*作为迭代器的类型,这是最简单的方法.我们将边界检查迭代器的实现留作练习(习题18). 人们通常不会为元素连续存储的数据类型(如vector)提供列表操作,如insert()或erase().但insert()和erase()这样的列表操

c++-关于《C++程序设计原理与实践》第3章例子的一个问题

问题描述 关于<C++程序设计原理与实践>第3章例子的一个问题 本人菜鸟,现正在学习C++.<C++程序设计原理与实践>第3章有一个例子,代码如下: #include #include #include #include #include using namespace std; inline void keep_window_open(){ char ch; cin >> ch; } int main() //C++ Programs start by executi

源代码-C++程序设计原理与实践

问题描述 C++程序设计原理与实践 #include "std_lib_facilities.h" int main() { cout<<"Hello,world!n"; return 0; } 我下了源代码,放到那里才能猜VC98编译时不出错?最好详细点,带有图解 解决方案 ...大哥,都什么年代了还用98

新亚马逊平板可花费15美元取消内置广告

亚马逊上周发布的新一代Kindle Fire平板电脑新浪科技讯 北京时间9月10日早间消息,亚马逊上周末表示,新一代Kindle Fire平板电脑的购买者只要多花15美元,就可以关闭内置于这几款平板电脑内的广告.亚马逊上周四推出了屏幕尺寸更大的Kindle Fire平板电脑,价格最低159,最高599美元,试图凭借价格和内容优势挑战平板电脑市场的霸主苹果iPad.亚马逊称,新一代Kindle Fire将内置"特惠商品"(special offers)广告,以帮助降低产品价格.当屏幕被锁

ASP编程入门进阶(八):内置对象Session_ASP基础

ASP对象中除了用于发送(Response).接收和处理数据(requeest).服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象. Session对象该对象在ASP使用中占相当大的比例.由于网页是一种无状态程序,无法得知用户浏览状态.在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对

ASP编程入门进阶(八):内置对象Session

ASP对象中除了用于发送(Response).接收和处理数据(requeest).服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象.Session对象该对象在ASP使用中占相当大的比例.由于网页是一种无状态程序,无法得知用户浏览状态.在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对象

ASP编程入门进阶(四):内置对象Request

request|编程|对象|内置对象 系统学习ASP,就是先从ASP的几大内置对象开始的.一般称五大对象:Request.Response.Server.Session.Application今天先来看看Request对象. 当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?很简单,当看到"<%"和"%>"就表明是ASP,并且两者之间的就是ASP源码. 那为什么要学对象,对象的作用又是如何的?其实ASP所提供的这些可在脚本中使用

ASP编程入门进阶(五):内置对象Response

response|编程|对象|内置对象 通过对Request对象的学习,可以了解到,Request对象是服务器端用来获取客户端的信息的.但作为服务器和客户端进行交互,是不是还缺少服务器端向客户端发送信息呢?对象Response正是担任此责任.负责将信息传递给用户的对象就是Response了,它可动态地响应客户端的请求,并将动态生成的响应结果返回给客户端浏览器.一,Response.write在Response中write方法是使用最频繁的一个了,write就是写:将指定的字符串写到当前的 HTT