一维数组的简单封装 carray模板。
来源:互联网 发布:西宁网络电视客服电话 编辑:程序博客网 时间:2024/06/10 05:06
#ifndef CARRAY_HEADER
#define CARRAY_HEADER
//这个程序取材于 Bjarne Stroustrup 的《The C++ Programming Language》,后经过加强和改正。
//作者是:Piboye
#include <iterator>
namespace piboye
{
template<typename T,int n>
class carray
{
char i_data[sizeof(T)*n];
public:
typedef T value_type;
typedef value_type * iterator;
typedef value_type const * const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef value_type & reference;
typedef value_type const & const_reference;
typedef value_type * pointer;
typedef value_type const * const_pointer;
typedef ptrdiff_t difference_type;
typedef int size_type;
private:
const_pointer cast()const {return reinterpret_cast<const_pointer>(i_data);}
pointer cast() {return reinterpret_cast<pointer>(i_data);}
public:
//Full Constructor
carray (value_type const &a_1) {
for(int i=0;i<size();++i) {
new (cast()+i) value_type(a_1);
}
}
template<typename T1>
carray (T1 a_iter) {
for(int i=0;i<size();++i) {
new (cast()+i) value_type(*a_iter);
++a_iter;
}
}
carray(carray const & a_1) {
for(int i=0;i<size();++i) {
new (cast()+i) value_type(a_1[i]);
}
}
carray & operator=(carray const & a_1) {
for(int i=0;i<size();++i) {
cast()[i]=a_1[i];
}
return *this;
}
//Destrcutor
~carray() {
delete [] cast();
}
//iterator
iterator begin() {
return cast();
}
iterator end() {
return cast()+size();
}
const_iterator begin() const {
return cast();
}
const_iterator end() const {
return cast()+size();
}
//reverse_iterator
reverse_iterator rbegin() {
return reverse_iterator (cast()+size());
}
reverse_iterator rend() {
return reverse_iterator(cast());
}
const_reverse_iterator rbegin() const {
return const_reverse_iterator (cast()+size());
}
const_reverse_iterator rend() const {
return const_reverse_iterator(cast());
}
value_type & operator[](int a_index) {
return cast()[a_index];
}
value_type const & operator[](int a_index) const {
return cast()[a_index];
}
size_type size() const {
return n;
}
value_type front() const {
return cast()[0];
}
value_type back() const {
return cast()[size()-1];
}
//Following is unsafted;
//Partition Constructor
}; // class carray ended
} // namespace piboye ended
#endif //CARRAY_HEADER
- 一维数组的简单封装 carray模板。
- MFC数组模板类CArray
- CArray 动态数组模板类学习笔记
- 一、数组的封装
- 树状数组模板(一维的)
- C++中动态数组CArray的使用
- MFC中动态数组CArray的使用
- MFC中动态数组CArray的使用
- MFC中动态数组CArray的使用
- MFC中动态数组CArray的使用
- MFC数组类CArray的使用
- MFC中动态数组CArray的使用
- MFC数组类CArray的使用
- 简单的分页封装(一)
- 简单封装FMDB操作sqlite的模板
- 一个简单的模板数组
- vector与CArray的区别(一) -- 效率
- 一维树状数组模板
- malware analysis 实战
- 三种表格效果
- C++ GUI编程---使用SmartWin++
- 冲动的惩罚
- 特殊用途的IP地址介绍
- 一维数组的简单封装 carray模板。
- 泛型在Java中的用法。(摘自精通Jbuilder 2005)
- 如何看懂HijackThis扫描日志------学习帖
- 常见的SREng操作
- Borland Together Designer
- 定时器与多线程
- 在不支持FSO的服务器上使用XMLDOM创建HTML文件
- SQL Server 中各个系统表的作用
- Servlet中捕获Session事件