【头文件】c++实现数组

原创 2004年07月15日 14:35:00

#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using namespace std; 
template<typename elemtype> class array {
public:
    //构造函数集合
    array ( int sz = MIN );
    array ( const array<elemtype>& );
    array( const elemtype*,const int );
    //运算符重载集合
    const bool operator ==( const array<elemtype>& ) const;
    const bool operator !=( const array<elemtype>& ) const;
    const array operator =( const array<elemtype>& );
    elemtype &operator [] ( const int index );

    //内置方法
    const int size() const ;
    const elemtype min() const ;
    const elemtype max() const ;

private:
    //私有函数
    void array_init( const elemtype *ap,const int sz );//初始化
   
 //私有数据
    elemtype     *ia;//数组头指针
    int         _size;//数组长度
};

//数组实现代码
//私有函数
template<typename elemtype>
    void
    array<elemtype>::array_init(const elemtype *ap,
                  const int sz)
    {
       _size = sz;
       ia = new elemtype [ _size ];
       for( int i = 0;i < _size;++i )
    {
           if( !ap )
              ia[ i ] = 0;
           else
              ia[ i ] = ap[ i ];
    }

}
//公有函数
//构造函数集合
template<typename elemtype>
    array<elemtype>::array ( int sz )
    {
       array_init( 0,sz );
    }
template<typename elemtype>
    array<elemtype>::array ( const array<elemtype> &a)  
    {
       array_init( a.ia,a._size );
    }
template<typename elemtype>
    array<elemtype>::array( const elemtype *ay,
                         const int sz )
{
    array_init( ay,sz );
}

//方法集合
template<typename elemtype>
    const elemtype array<elemtype>::max() const  
    {
       elemtype *max = ia;
       for( int ix = 0; ix < _size; ++ix )
           max = *max < ia[ ix ]? ia + ix: max;
       return *max;
    }
template<typename elemtype>
    const elemtype array<elemtype>::min() const
    {
       elemtype *min = ia;
       for( int ix = 0; ix < _size; ++ix )
           min = *min > ia[ ix ]? ia + ix: min;
       return *min;
    }
template<typename elemtype>
    const int array<elemtype>::size()  const
    {
       return _size;
    }

//操作符集合
template<typename elemtype>
    elemtype& array<elemtype>::operator []( const int index )
    {
       assert( index >= 0 && index <= _size );
       return ia[ index ];
    }

template<typename elemtype>
    const array<elemtype>
    array<elemtype>::operator =( const array<elemtype> &a )
    {
           _size = a._size;
           ia = new elemtype [ _size ];
           for( int i = 0;i <= a._size;++i )
           ia[ i ] = a.ia[ i ];

           return *this;
    }

template<typename elemtype>
    const bool
    array<elemtype>::
    operator ==( const array<elemtype> &A ) const
    {
       bool x = true;
       try
    {
     if( _size != A._size )
              throw x;
           for( int i = 0; i <= _size; ++i )
              if( ia[ i ] != A.ia[ i ] )
                  throw x;
       }
       catch( bool x )
    {
           return x = false;
       }

       return x;
    }

template<typename elemtype>
    const bool
    array<elemtype>::
    operator !=( const array<elemtype> &A )  const
    {
       bool x = true;
       try
    {
           if( _size == A._size )
              throw x;
           for( int i = 0; i <= _size; ++i)
              if( ia[ i ] == A.ia[ i ] )
                  throw x;
       }
       catch( bool x )
    {
           return x = false;
       }

       return x;
    }

#endif

c++实现atoi()和itoa()函数(字符串和整数转化)

一:起因 (1)字符串类型转化为整数型(Integer),还是字符串类型(String)转化为Double类型,这在java里面有非常好的内部函数,很easy的事情; (2)但是在c里面没有Integ...
  • u010700335
  • u010700335
  • 2014年11月20日 10:45
  • 6717

刚学数据结构,写了个C语言栈的头文件方便新手一块用~

基于CSDN一位大牛的头文件结构写出来的。本人新手,可能有Bug。
  • kacc_123
  • kacc_123
  • 2014年12月19日 20:11
  • 1730

C++头文件多次包含 变量,函数重定义解决方案

在C++中,最长用的编程方式是: .h:头文件中添加 变量,类等等一下对象或 函数的声明;头文件中添加宏定义 或 #pragma once(VC 中),头文件只编译一次; .cpp:文件中添加 头...
  • chinabinlang
  • chinabinlang
  • 2013年01月26日 08:38
  • 5418

C++在头文件中编写实现代码的坏处

http://www.dewen.io/q/5951 1 在头文件中编写代码会导致同样的二进制被多个模块反复编译内联,导致程序体积上升 2 头文件中的代码会被很多的cpp文件引用,导致重复...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2015年09月28日 16:17
  • 1710

队列链式存储结构的C++模板类头文件源代码实现

队列的链式存储结构与链表的区别除了成员函数的不同以外,还有队列的成员变量增加了尾指针,这是因为增加变量需要从链表的尾部添加,若每次从头结点开始遍历的话太费时间,头指针是一个空数据的节点指针,它是一个一...
  • Alex123980
  • Alex123980
  • 2016年06月01日 14:37
  • 582

二叉树的C++模板类头文件源代码实现

顺序存储的二叉树结构利用数组给满二叉树进行编号,而实际情况中的二叉树不满足满二叉树和完全二叉树,因此会导致内存空间的浪费,所以本文采用链表的存储方式,定义树节点结构体,包含数据和两个左右儿子指针。类的...
  • Alex123980
  • Alex123980
  • 2016年06月01日 17:14
  • 1879

为什么C++编译器不支持模板头文件和实现代码分离的编译

首先,C++标准中提到,一个编译单元[translation unit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该....
  • panfengsoftware
  • panfengsoftware
  • 2013年04月02日 21:23
  • 313

AlexNet模型实现(1. C++宏定义头文件)

AlexNet架构参数宏定义
  • aitazhixin
  • aitazhixin
  • 2017年06月16日 10:33
  • 1499

为什么C++编译器不支持模板头文件和实现代码分离的编译

转载自http://blog.csdn.net/thinkscape/article/details/3567420
  • u010450926
  • u010450926
  • 2014年08月25日 23:59
  • 335

c++ 头文件<cwchar>中常见函数的实现!!!

c++ 头文件中常见函数的实现!!!这里有wcsncmp,wcsncat,wmemmove,wmemcpy函数的实现!!!...
  • focusing_on_cpp
  • focusing_on_cpp
  • 2015年06月14日 21:07
  • 1975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【头文件】c++实现数组
举报原因:
原因补充:

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