动态数组

来源:互联网 发布:南方贵金属交易软件 编辑:程序博客网 时间:2024/04/30 10:14

from Arcemu code:

 

/* * Copyright (c) 2001 Jani Kajala * * Permission to use, copy, modify, distribute and sell this * software and its documentation for any purpose is hereby * granted without fee, provided that the above copyright notice * appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation. * Jani Kajala makes no representations about the suitability * of this software for any purpose. It is provided "as is" * without express or implied warranty. */#ifndef _DEV_ARRAY_H#define _DEV_ARRAY_H/** Very simple dynamic array. */template <class T> class Array{public:/** Creates an empty array. */Array() :m_data(0), m_len(0), m_cap(0){}/** Creates an array of specified size. */explicit Array(int size) :m_data(0), m_len(0), m_cap(0){setSize(size);}///~Array(){delete[] m_data;}/** Appends an item at the end of the array. */void add(const T & item){if(m_len + 1 > m_cap)setCapacity(m_len + 1);m_data[m_len++] = item;}/** Resizes the array. */void setSize(int size){if(size > m_cap)setCapacity(size);m_len = size;}/** Returns ith item. */T & operator[](int i){return m_data[i];}/** Returns pointer to the first element in the vector. */T* begin(){return m_data;}/** Returns pointer to one beyond the last element in the vector. */T* end(){return m_data + m_len;}/** Returns number of items in the array. */int size() const{return m_len;}/** Returns ith item. */const T & operator[](int i) const{return m_data[i];}/** Returns pointer to the first element in the vector. */const T* begin() const{return m_data;}/** Returns pointer to one beyond the last element in the vector. */const T* end() const{return m_data + m_len;}private:T*m_data;intm_len;intm_cap;void setCapacity(int cap){++cap;if(cap < 8)cap = 8;else if(cap < m_cap * 2)cap = m_cap * 2;m_cap = cap;T* data = new T[cap];for(int i = 0 ; i < m_len ; ++i)data[i] = m_data[i];delete[] m_data;m_data = data;}};#endif // _DEV_ARRAY_H