LinuxC/C++编程基础(4) 基于泛型实现vector
2012-11-21 18:05
691 查看
一.vector泛型类的定义,如下:
#ifndef VECTOR_H_
#define VECTOR_H_
#include <stdio.h>
template<class Object>
class Vector {
public:
explicit Vector(int initsize = 0) :
theSize(initsize), theCapacity(initsize + SPACE_CAPACITY) {
datas = new Object[theCapacity];
}
Vector(const Vector & rhs) :
datas(NULL) {
operator=(rhs);
}
~Vector() {
delete[] datas;
}
const Vector & operator=(const Vector& rhs) {
if (&rhs != this) {
delete[] datas;
theSize = rhs.size();
theCapacity = rhs.capacity();
datas = new Object[theCapacity];
for (int k = 0; k < theSize; ++k)
datas[k] = rhs.datas[k];
}
return *this;
}
void resize(int newSize) {
if (newSize > theCapacity)
reserve(newSize * 2 + 1);
theSize = newSize;
}
void reserve(int newCapacity) {
if (newCapacity < theSize)
return;
Object* olddatas = datas;
datas = new Object[newCapacity];
for (int k = 0; k < theSize; ++k)
datas[k] = olddatas[k];
theCapacity = newCapacity;
delete[] olddatas;
}
Object& operator[](int index) {
return datas[index];
}
const Object& operator[](int index) const {
return datas[index];
}
bool empty() const {
return theSize == 0;
}
int size() const {
return theSize;
}
int capacity() const {
return theCapacity;
}
void push_back(const Object & x) {
if (theSize == theCapacity)
reserve(2 * theCapacity + 1);
datas[theSize++] = x;
}
void pop_back() {
theSize--;
}
const Object& front() const{//返回第一个元素的引用
return datas[0];
}
const Object& back() const {
return datas[theSize - 1];
}
typedef Object* iterator;
typedef const Object* const_iterator;
iterator begin() {
return &datas[0];
}
const_iterator begin() const {
return &datas[0];
}
iterator end() {
return &datas[size()];
}
const_iterator end() const {//end()函数返回的是vector末端的下一个位置,必须注意
return &datas[size()];
}
enum {
SPACE_CAPACITY = 16
};
private:
int theSize;
int theCapacity;
Object * datas;
};
#endif /* VECTOR_H_ */
二.main.cpp函数的实现,如下:
#include "Vector.h"
int main(int argc, char* argv[])
{
Vector<int> vec;
Vector<int>::iterator it;
for(int j=0;j<5;++j){
vec.push_back(j);
}
for(it=vec.begin();it != vec.end();++it){
cout<<*it<<endl;
}
return 0;
}
未完待续~
参考文献:http://blog.csdn.net/luxiaoxun/article/details/7433373
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8209099
#ifndef VECTOR_H_
#define VECTOR_H_
#include <stdio.h>
template<class Object>
class Vector {
public:
explicit Vector(int initsize = 0) :
theSize(initsize), theCapacity(initsize + SPACE_CAPACITY) {
datas = new Object[theCapacity];
}
Vector(const Vector & rhs) :
datas(NULL) {
operator=(rhs);
}
~Vector() {
delete[] datas;
}
const Vector & operator=(const Vector& rhs) {
if (&rhs != this) {
delete[] datas;
theSize = rhs.size();
theCapacity = rhs.capacity();
datas = new Object[theCapacity];
for (int k = 0; k < theSize; ++k)
datas[k] = rhs.datas[k];
}
return *this;
}
void resize(int newSize) {
if (newSize > theCapacity)
reserve(newSize * 2 + 1);
theSize = newSize;
}
void reserve(int newCapacity) {
if (newCapacity < theSize)
return;
Object* olddatas = datas;
datas = new Object[newCapacity];
for (int k = 0; k < theSize; ++k)
datas[k] = olddatas[k];
theCapacity = newCapacity;
delete[] olddatas;
}
Object& operator[](int index) {
return datas[index];
}
const Object& operator[](int index) const {
return datas[index];
}
bool empty() const {
return theSize == 0;
}
int size() const {
return theSize;
}
int capacity() const {
return theCapacity;
}
void push_back(const Object & x) {
if (theSize == theCapacity)
reserve(2 * theCapacity + 1);
datas[theSize++] = x;
}
void pop_back() {
theSize--;
}
const Object& front() const{//返回第一个元素的引用
return datas[0];
}
const Object& back() const {
return datas[theSize - 1];
}
typedef Object* iterator;
typedef const Object* const_iterator;
iterator begin() {
return &datas[0];
}
const_iterator begin() const {
return &datas[0];
}
iterator end() {
return &datas[size()];
}
const_iterator end() const {//end()函数返回的是vector末端的下一个位置,必须注意
return &datas[size()];
}
enum {
SPACE_CAPACITY = 16
};
private:
int theSize;
int theCapacity;
Object * datas;
};
#endif /* VECTOR_H_ */
二.main.cpp函数的实现,如下:
#include "Vector.h"
int main(int argc, char* argv[])
{
Vector<int> vec;
Vector<int>::iterator it;
for(int j=0;j<5;++j){
vec.push_back(j);
}
for(it=vec.begin();it != vec.end();++it){
cout<<*it<<endl;
}
return 0;
}
未完待续~
参考文献:http://blog.csdn.net/luxiaoxun/article/details/7433373
转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8209099
相关文章推荐
- LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例
- LinuxC/C++编程基础(1) 函数指针实现复数的加减乘除
- LinuxC/C++编程基础(6) 堆排序的实现
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(3) 基于管道的进程间通信机制
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(2) 基于boost::any构建数据容器
- LinuxC/C++编程基础(33) 视频包缓存的实现(续1)
- LinuxC/C++编程基础(36) Poco::BinaryReader的实现
- LinuxC/C++编程基础(37) Cumulus::BinaryReader的实现
- LinuxC/C++编程基础(11) 基于深度优先搜索查找迷宫路线
- LinuxC/C++编程基础(12) 红黑树的实现
- LinuxC/C++编程基础(5) 排序二叉树的实现
- LinuxC/C++编程基础(19) 不可复制类的原理及实现
- LinuxC/C++编程基础(30) 视频包缓存的实现
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(10) quicksort的简单实现
- Linux下基于C/C++的Socket编程基础
- LinuxC/C++编程基础(9) 二叉查找树的实现
- Linux下基于C/C++的Socket编程基础