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;
}
c/c++ 模板与STL小例子系列<一 >自建Array数组的更多相关文章
- c/c++ 模板与STL小例子系列<三> traits
c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...
- c/c++ 模板与STL小例子系列<二> 模板类与友元函数
c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...
- 【JavaScript数据结构系列】01-数组Array
[JavaScript数据结构系列]01-数组Array 码路工人 CoderMonkey 转载请注明作者与出处 # [JavaScript数据结构系列] # 01-数组Array 数组: 是有序的元 ...
- HDU 4520 小Q系列故事――最佳裁判(STL)
小Q系列故事——最佳裁判 Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体 ...
- STL学习系列之一——标准模板库STL介绍
库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...
- backbone入门小例子
最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...
- Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期
学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...
随机推荐
- Win32编程之静态库编写与使用.动态链接库的编写与使用
Win32编程之静态库编写与使用.动态链接库的编写与使用 一丶什么是静态库.什么是动态链接库. 静态库其实就是解决模块开发的一种解决方案.在以前.我们写代码的时候.每个人都可以独立写一个项目.但是现在 ...
- python3 对拉勾数据进行可视化分析
上回说到我们如何如何把拉勾的数据抓取下来的,既然获取了数据,就别放着不动,把它拿出来分析一下,看看这些数据里面都包含了什么信息.(本次博客源码地址:https://github.com/MaxLyu/ ...
- 深入学习主成分分析(PCA)算法原理(Python实现)
一:引入问题 首先看一个表格,下表是某些学生的语文,数学,物理,化学成绩统计: 首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系,那么如何判断三个学生的优秀程度呢?首先我们一眼 ...
- Spring Boot (五)Spring Data JPA 操作 MySQL 8
一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)
摘要 本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意.解题思路和代码实现,意即熟悉区域赛比赛题型. Built ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- [转]Illuminate Database
本文转自:https://github.com/illuminate/database Illuminate Database The Illuminate Database component is ...
- .NET面试题01-值类型与引用类型
常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...
- [日常] PHP库函数fgetss的BUG
1. fgetss函数php官网的解释是: (PHP 4, PHP 5, PHP 7) fgetss — 从文件指针中读取一行并过滤掉 HTML 标记 2. 测试后出现的问题是: 当文本中有一行数据 ...
- [android] 插入一条记录到系统短信应用里
谷歌市场上有这些应用,模拟短信,原理就是把数据插入到短信应用的数据库里 获取ContentResolver对象,通过getContentResolver()方法 调用resolver对象的insert ...