zoukankan      html  css  js  c++  java
  • 数组类指针

    模板参数可以是字面量型参数(非类型参数),

    template <typename T,int N>  // N是字面量型参数
    void function()
    {
        
    }
    
    function<double,10>();  // 调用时

    字面量型参数限制:变量,浮点数(无法精确表示),类对象不能作为模板参数。(模板参数是在编译阶段是要被确定的)

    // 类模板实现递归
    
    template
    < int N >  // 字面量参数模板
    class Sum
    {
    public:
        static const int VALUE = Sum<N-1>::VALUE + N;  // 递归过程是由编译器完成的
    };
    
    template
    < >      // 参数为字面量的完全特化模板
    class Sum < 1 >   // 当N为1时调用这里的模板,递归的截至条件
    {
    public:
        static const int VALUE = 1;  // VALUE 可能存入静态存储区,可能存入常量表。由于定义了值,所以进入常量表。由于被static声明,所以进入静态存储区。
    };
    
    int main()
    {
        cout << Sum<10>::VALUE << endl;  // 编译时就做了递归操作,所以VALUE值是一个常量值,这里只是访问
        return 0;
    }

    数组模板类:

     1 #ifndef _ARRAY_H_
     2 #define _ARRAY_H_
     3 
     4 template
     5 < typename T, int N >
     6 class Array
     7 {
     8     T m_array[N];
     9 public:
    10     int length();
    11     bool set(int index, T value);
    12     bool get(int index, T& value);
    13     T& operator[] (int index);
    14     T operator[] (int index) const;
    15     virtual ~Array();
    16 };
    17 
    18 template
    19 < typename T, int N >
    20 int Array<T, N>::length()
    21 {
    22     return N;
    23 }
    24 
    25 template
    26 < typename T, int N >
    27 bool Array<T, N>::set(int index, T value)
    28 {
    29     bool ret = (0 <= index) && (index < N);
    30     
    31     if( ret )
    32     {
    33         m_array[index] = value;
    34     }
    35     
    36     return ret;
    37 }
    38 
    39 template
    40 < typename T, int N >
    41 bool Array<T, N>::get(int index, T& value)
    42 {
    43     bool ret = (0 <= index) && (index < N);
    44     
    45     if( ret )
    46     {
    47         value = m_array[index];
    48     }
    49     
    50     return ret;
    51 }
    52 
    53 template
    54 < typename T, int N >
    55 T& Array<T, N>::operator[] (int index)
    56 {
    57     return m_array[index];
    58 }
    59 
    60 template
    61 < typename T, int N >
    62 T Array<T, N>::operator[] (int index) const
    63 {
    64     return m_array[index];
    65 }
    66 
    67 template
    68 < typename T, int N >
    69 Array<T, N>::~Array()
    70 {
    71 
    72 }
    73 
    74 #endif
    View Code
    #include <iostream>
    #include <string>
    #include "Array.h"
    #include "HeapArray.h"
    
    using namespace std;
    
    int main()
    {
        Array<double, 5> ad;
        
        for(int i=0; i<ad.length(); i++)
        {
            ad[i] = i * i;
        }
        
        for(int i=0; i<ad.length(); i++)
        {
            cout << ad[i] << endl;
        }
        
    
        return 0;
    }
    View Code
  • 相关阅读:
    Codeforces 401C Team 贪心法
    C++ 编译,执行过程 具体解释。
    [从头学数学] 第156节 概率初步
    关于flex,好像有12个属性非常重要
    数据清洗小记(12):姓与名的提取
    理解Angular中的$apply()以及$digest()
    Oracle开发者守则
    黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile
    GPU 编程入门到精通(四)之 GPU 程序优化
    Python 面向对象编程 继承 和多态
  • 原文地址:https://www.cnblogs.com/zsy12138/p/10861609.html
Copyright © 2011-2022 走看看