C++实战:一个轻型数组类的实现

原创 2004年08月24日 18:26:00

C++实战:一个轻型数组类的实现

说明:这个数组类可视为标准库中vector的简化版:支持数组的一般操作,支持复制、赋值,支持重新定义大小; 不考虑多线程,不考虑预分配额外空间以进行的性能优化,不设置迭代器。

#include <iostream>                 // 仅用于测试时输出,数组类本身不需要

template <typename Type>
class Array
{
public:
    typedef unsigned int size_tp;   // 数组的尺寸(下标)类型

    Array(size_tp size = 0, Type t = Type());     // 可以用size指定初始大小,t指定初始值
    Array(const Array& array);
    ~Array();                                     // 空间自动释放

    Type& operator[](size_tp index);              // 下标访问(读/写形式)
    const Type& operator[](size_tp index) const;  // 下标访问(只读形式)
    Array& operator=(const Array& rhs);           // 赋值,改变大小/内容

    size_tp get_size() const;                     // 获得数组大小
    void resize(size_tp size);                    // 重设数组大小,若改小,则丢弃尾数据

    void push_back(const Type& value);            // 追加一个数组元素,数组大小增一

private:
    void copy(const Type *p_source, Type *p_target, size_tp size);
    size_tp _size;
    Type *_arr;
};

template <typename Type>
Array<Type>::Array(size_tp size, Type t): _size(size), _arr(size ? new Type[size] : 0)
{
    for (size_tp i = 0; i < size; ++i)      // not executed if (size == 0)
 _arr[i] = t;
}

template <typename Type>
Array<Type>::Array(const Array& array):
_size(array._size),
_arr(array._size ? new Type[array._size] : 0)
{
    copy(_array._arr, _arr, array._size);  // do nothing if (array._size == 0)
}

template <typename Type>
Array<Type>::~Array()
{
    delete[] _arr;
}

template <typename Type>
Array<Type>& Array<Type>::operator=(const Array<Type>& rhs)
{
    if (&rhs != this)
    {
 resize(rhs._size);
 copy(rhs._arr, _arr, _size);
    }
    return *this;
}

template <typename Type>
Type& Array<Type>::operator[](size_tp index)
{
    if (index >= _size)
 throw("Array::out of range");
    return _arr[index];
}

template <typename Type>
const Type& Array<Type>::operator[](size_tp index) const
{
    if (index >= _size)
 throw("Array::out of range");
    return _arr[index];
}

template <typename Type>
Array<Type>::size_tp Array<Type>::get_size() const
{
    return _size;
}

template <typename Type>
void Array<Type>::copy(const Type *p_source, Type *p_target, size_tp size)
{
    for (size_tp i = 0; i < size; ++i)      // not executed if (size == 0)
 p_target[i] = p_source[i];
}

template <typename Type>
void Array<Type>::resize(size_tp new_size)
{
    if (new_size)
    {
 Type *p = new Type[new_size];
 copy(_arr, p, _size < new_size ? _size : new_size);
 delete[] _arr;
 _arr = p;
    }
    else
    {
 delete[] _arr;
 _arr = 0;
    }
    _size = new_size;
}

template <typename Type>
void Array<Type>::push_back(const Type& value)
{
    resize(_size + 1);
    _arr[_size - 1] = value;
}

int main()                 // 主测试函数
{
    Array<int> a(30, 5);
    Array<int> b;
    b.push_back(20);
    b.push_back(100);
    a = b;
    for (Array<int>::size_tp i = 0; i < a.get_size(); ++i)
 std::cout << a[i] << std::endl;
    return 0;
}

c++实现一个数组类

c++重构数组
  • qq_24282081
  • qq_24282081
  • 2017年06月02日 22:04
  • 680

C++学习之动态数组类的封装

动态数组(Dynamic Array)是指动态分配的、可以根据需求动态增长占用内存的数组。为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用、内存分配策略、类的四大函数(构...
  • lisong694767315
  • lisong694767315
  • 2014年07月29日 17:03
  • 3985

用C++的模板类定义一个万能数组,数组元素类型任意,数组大小也任意

/*用模版类实现一个万能数组,数组类型可以任意给定,数组大小可以任意给定*/ /* 函数调用 typeid(变量).name() 获取变量的类型名 */ #include using n...
  • smallgyy
  • smallgyy
  • 2013年04月18日 13:58
  • 4919

C++:简单的二维数组模板类

这是我自己封闭的简单的二维数组模板类。欢迎大家试用 我用它来代替二维数组或二维vector(二维数组容易出错,二维vector效率太低)...
  • AAA20090987
  • AAA20090987
  • 2013年11月19日 18:09
  • 2018

C++ 声明并实现一个复数类

/****************************************************************************************** complex....
  • ZhongQi0808
  • ZhongQi0808
  • 2015年04月30日 11:21
  • 1292

C++实践参考——数组类运算的实现

【项目-数组类运算的实现】   设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数(构造、析构函数)和运算符重载的函数。   实现策略提示:可以将测试函数中的语句加上注释,取消一...
  • sxhelijian
  • sxhelijian
  • 2016年05月10日 15:04
  • 3655

C++一个数组实现两个栈

方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。 方案二:从中间分别向两边...
  • qingdou_aixuexi
  • qingdou_aixuexi
  • 2016年09月10日 22:14
  • 326

【C++】数组类的定义(类模板)

一、为什么要引进类模板 减少代码重用。 这个概念在C++里有很多 二、类模板与模板类 (1)类模板的含义 类模板的意思是,按不同的方式重复使用相同的代码。 一个类模板(也称为类属类或类生成...
  • qq_31828515
  • qq_31828515
  • 2016年06月17日 17:36
  • 3053

C++之类,类的数组,一次实例化多个类的实例。

你看到的这个文章来自于http://www.cnblogs.com/ayanmw 听说 C++的class比struct高级,但是我经常使用struct的指针,而且用起来很灵活非常强大,就是许多事情...
  • u010944926
  • u010944926
  • 2014年03月01日 12:02
  • 1174

C++利用模板实现一个队列

开头总结:.利用模板类实现了一个队列,利用模板的好处是提供泛型编程,在存储数据的时候会适应不同类型的数据,减少了代码的书写,简化了程序的结构。#include using namespace std...
  • bao2516090
  • bao2516090
  • 2015年09月19日 19:40
  • 1857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实战:一个轻型数组类的实现
举报原因:
原因补充:

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