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;
}

原文地址:https://www.cnblogs.com/xiaoshiwang/p/9545313.html

时间: 2024-11-08 20:49:02

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

underscore模板引擎的小例子

_.template(templateString, [data], [settings]) 这是template方法的api,可接受三个参数,其中: 第一个参数也是必须的参数是模版字符串,你可以通过<%=  %> 来插入变量,还可以通过<%  %>来插入js代码,也可以通过<%-  %>来进行html转义,如果变量很多,可以使用<% print() %>来简化. 第二个参数是传入模版的数据,如果不传第二个参数,那么这个方法会返回一个模版函数,这个模版函数可

limitBy过滤器是配合数组使用的,限制数组元素的个数,话不多说,来个小例子。

<div id="box"> <ul> <li v-for="val in arr | limitBy 2"> {{val}} < > </ul> </div> <> var vm=new Vue({ data:{ arr:[1,2,3,4,5] }, methods:{ } }).$mount('#box'); </> 可以看到,我在li标签里面循环数组时,添加了lim

HDU 4520 小Q系列故事――最佳裁判(STL)

小Q系列故事——最佳裁判 Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参加,而且中国队员获胜的几率很大,一般不会再给自己添堵,不然何谈看体育疗情伤呢. 跳水项目的一个重要环节就是裁判打分,小Q他们有时候会

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

freemarker入门小例子

我用freemarker做了两个小例子,主要的东西是:两个Test文件,一个Animal实体类,一个ftl模板---freemarker的模板,我使用maven做的java工程案例.主要结构内容如下图: 注意:需要导入freemarker的jar包: 1.首先我们先来了解一下freemarker的概念: freeMarker概述: FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写: FreeMarker被设计用来生成HTML Web页面,特别是基于MVC

八、C++ 标准模板库-STL概述

C++ 标准模板库-STL概述 一.基本概念 1.1 泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用,重用在两个方面有体现: 面向对象的思想:继承和多态,标准类库 泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL 简单地说就是使用模板的程序设计法.将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法. 标准模板库

javascript 面向对象写法的简单小例子,方面以后参考

面向对象写法的简单小例子,也即是一个小模板,方便以后拿来参考,如果有误,请各位大神多多指点.思想:主要给#box添加颜色和添加内容,一个方法是添加颜色,另一个方法是添加内容,然后编写的面向对象写法. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <st

标准模板库--STL

标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法.标准模板库 (Standard