何时使用模板——再论完整传递数组

原创 2007年09月29日 11:07:00

模板的终极用途我已经说过了,只是驱动编译器帮我们生成代码,但是可以使用模板的时候却很多, 由传递完整数组信息我想到使用模板的一种情况——获取我们无法得到的信息。

有些信息编译器知道,但我们不知道,而模板是在编译阶段工作的,因此,合理利用模板我们可以获取一些原本无法得到的东西,这里我想到的是1.完整传递数组2.swap函数和3.编译期的选择处理。

1.正如我在上一篇“完整传递数组信息”里所展示的获取编译器到底为我们的模板类型使用了什么类型替换一样,我们可以使用特制的模板获取编译器运行阶段的秘密。

2.看如下函数:

void    swap(a,b)
...{
    T    m;
    m    
= a;
    a    
= b;
    b    
= m;
}

这是一个无法编译通过的函数,因为我没有提供a、b的类型,但是这向我们展示了函数体里的情况,在函数入口可以获取类型信息,因为使用者已经告诉你了,但是到了函数体里,你知道a、b的类型,却没有一个方法从a、b中推导出他们的类型进而定义一个同类型的变量m,而编译器可以获取这个类型:

template    <typename T>
void    swap(T    a,T    b)
...{
    T    m;
    m    
= a;
    a    
= b;
    b    
= m;
}

使用模板我们把只有编译器知道的东西提取到了我们必须知道它的地方。

3.编译期选择

编译期的数据是在我们写完代码以后才出现的,同样编译期的某些确定数据却因为编码阶段不太明确而只得在运行阶段消耗时间获取,这是每个程序员都不想看到的,而模板可以让我们提前获取一些信息,这将极大的提高运行效率,这方面的东西我在最初的时候已经讨论不少了。

相关文章推荐

C++ STL入门教程(5)——map(关联数组)的使用(附完整程序代码)

一、简介 C++ Maps是一种关联式容器,包含“关键字/值”对。 其内部实现是红黑树,它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。 begin() 返回...

平衡树——Treap (含完整模板)

平衡树——Treap基本概念:二叉搜索树(BST): 对于任意根节点,满足左儿子的权值...
  • CHHNZ
  • CHHNZ
  • 2016年12月21日 22:37
  • 282

jni例子——使用int数组

  • 2011年12月13日 10:27
  • 94KB
  • 下载

数组实现栈功能(2)——类模板(C++练习记录)

数组实现栈功能(1)中,栈只能输入char类型数据。通过类模板,使其能接收各种数据类型。 类模板:template 类模板说明: 如同函数模板一样,使用类模板使用户可以为类定义一种模式,使得类中的某些...

树状数组、线段树模板(一)——单点更新 + HDU 1166 敌兵布阵

http://acm.hdu.edu.cn/showproblem.php?pid=1166 此题考查RSQ(Range Sum Query)。 模板如下: /*343ms,744KB*/ ...

OJ第二批——Problem K:填空题:类模板---求数组的最大值

问题及代码:   #include #include using namespace std; template class Array_max /...

形形色色的线段树练习——codevs线段树练习1-5:线段树,树状数组及分块模板

形形色色的线段树练习http://codevs.cn/problem/1080/线段树练习1//线段树版本 #include #include #include #include #include u...

SA(后缀数组)——倍增法模板

倍增法原理:一步一步把n个后缀按照它们的前 2 ^ k 的字符排序。

1004:函数模板——求数组中的最大元素

Problem Description 编写两个函数模板,分别完成输入数组,求数组中的最大元素。并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度类型。  ...
  • wtfsb
  • wtfsb
  • 2015年07月04日 13:23
  • 1184

自己的底层代码库(十六)——数组模板

这里放上一个数组模板,主要是封装了一下一维数组,和二维数组的
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:何时使用模板——再论完整传递数组
举报原因:
原因补充:

(最多只允许输入30个字)