zoukankan      html  css  js  c++  java
  • c/c++ 模板与STL小例子系列<一 >自建Array数组

    c/c++ 模板与STL小例子系列<一> 自建Array数组

    自建的Array数组,提供如下对外接口

    方法 功能描述
    Array() 无参数构造方法,构造元素个数为模板参数个的数组
    Array(int length) 有参数构造方法,构造元素个数为参数length个的数组
    ~Array() 析构函数
    int size() 返回数组中元素的个数
    T& get(int num) 返回数组中指定下标的元素的引用
    void set(T data, int num) 设置指定下标元素的值
    T& operator [] (int num) 重载类型T的[]函数

    下面代码用使用了私有元素size1,本来想用size命名,但是因为在公有方法里声明了int size()方法,编译不过去,所以起名为size1,感觉很奇怪。

    my_array.h

    ifndef __my_array__
    #define __my_array__
    template<typename T, int n>
    class Array {
    public:
      Array();
      Array(int length);
      ~Array();
      T& get(int idx);
      T& operator[](int idx);
      void set(T data, int idx);
      int size();
    private:
      T* pt;
      int size1;
    
    };
    //构造函数
    template<typename T, int n>
    Array<T, n>::Array(){
      pt = new T[n];
      size1 = n;
    }
    //构造函数
    template<typename T, int n>
    Array<T, n>::Array(int length){
      pt = new T[length];
      size1 = length;
    }
    //析构函数
    template<typename T, int n>
    Array<T, n>::~Array(){
      delete [] pt;
    }
    //取得数组元素的个数
    template<typename T, int n>
    int Array<T,n>::size(){
      return size1;
    }
    //得到指定下标的元素
    template<typename T, int n>
    T& Array<T, n>::get(int num){
      if(num >= size1 || num < 0){
        //异常                                                      
      }
      else{
        return pt[num];
      }
    }
    //设定指定下标元素的值
    template<typename T, int n>
    void Array<T, n>::set(T data, int num){
      if(num >= size1 || num < 0){
        //异常                                                      
      }
      else{
        pt[num] = data;
      }
    }
    //重载元素类型的[]函数
    template<typename T, int n>
    T& Array<T, n>::operator[](int num){
      if(num >= size1 || num < 0){
        //异常                                                      
      }
      else{
        return *(pt + num);
      }
    }
    #endif
    

    测试程序:

    #include <iostream>
    #include <string>
    #include "my_array.h"
    
    using namespace std;
    
    int main(){
      Array<int, 5> ary;
      for(int i = 0; i < ary.size(); ++i){
        ary.set(i * 10, i);
        cout << ary.get(i) << " ";
        cout << ary[i] << ", ";
      }
      cout << endl;
    
      Array<string, 3> asr(4);
      for(int i = 0; i < asr.size(); ++i){
        asr.set("AAA", i);
        cout << asr.get(i) << " ";
        cout << asr[i] << ", ";
      }
      cout << endl;
      return 0;
    }
    
  • 相关阅读:
    LeetCode-62. Unique Paths
    南大算法设计与分析课程课后习题(3)
    linux-2.6.18源码分析笔记---信号
    南大算法设计与分析课程复习笔记(4)L4
    南大算法设计与分析课程复习笔记(3)L3
    南大算法设计与分析课程复习笔记(2)L2
    南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对
    【zz】史上最全设计模式导学目录(完整版)
    gtest学习
    全文检索及ElasticSearch框架学习
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9545313.html
Copyright © 2011-2022 走看看