Vector类的实现

实现部分vector的类

template <typename Object>
class Vector{
public:
       explicit Vector(int initSize = 0)
	:theSize(initSize), theCapacity(initSize+SPARE_CAPACITY){
		objects = new Object[theCapacity];
	}
       Vector(const Vector & rhs):objects(NULL){
       	operator = (rhs);
       }
       ~Vector(){
       	delete [] objects;
       }
       const Vector & operator=(const Vector &rhs){
       	delete [] objects;
       	theSize = rhs.size();
       	theCapacity = rhs.theCapacity;

       	objects = new Object[capacity()];
       	for(int k = 0; k < theSize; k++)
       	      objects[k] = rhs.objects[k];
       }
       void resize(int newSize){
       	if(newSize > theCapacity)
       		reserve(newSize*2 + 1);
       	theSize = newSize;
       }
       void reserve(int newCapacity){
	if(newCapacity < theSize)
	    return;
	Object * oldArray = objects;

	objects = new Object[newCapacity];
	for(int k = 0; k < theSize; k++)
		objects[k] = oldArray[k];
	theCapacity = newCapacity;
	delete [] oldArray;
       }
       Object &operator[] (int index){
       	return objects[index];
       }
       const Object & operator[](int index) const{
       	return objects[index];
       }
       bool empty() const{
       	return size() == 0;
       }
       int size() const{
       	return theSize;
       }
       int capacity() const{
       	return theCapacity;
       }
       void push_back(const Object &x){
       	if(theSize == theCapacity)
       		reserve(2*theCapacity+1);
       	objects[theSize++] = x;
       }
       void pop_back(){
       	theSize--;
       }
       const Object & back() const{
       	return objects[theSize-1];
       }
       typedef Object iterator;
       typedef const Object * const_iterator;
      iterator begin( )
      { return &objects[ 0 ]; }
     const_iterator begin( ) const
      { return &objects[ 0 ]; }
     iterator end( )
      { return &objects[ size( ) ]; }
     const_iterator end( ) const
      { return &objects[ size( ) ]; }

    enum { SPARE_CAPACITY = 16 };        

private:
	int theSize;
	int theCapacity;
	Object *objects;
}
时间: 2024-10-05 16:36:18

Vector类的实现的相关文章

利用std::allocator实现自定义的vector类

std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #include <iostream> 2 #include <memory> 3 using std::cout; 4 using std::endl; 5 6 template <typename Tp> 7 class Vector 8 { 9 public: 10 Vector

C++ vector类详解

转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了:而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量. vector的扩充机制:按照容器现在容量的一倍进行增长.vecto

强大而好用的vector类------载自他处

vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了:而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量. vector的扩充机制:按照容器现在容量的一倍进行增长.vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请

java中的Vector类

在java中的同步,是指多个线程在同时要访问某个对象.变量.方法.代码快等等时,保证只有唯一线程访问同步的对象(即用synchronized修为的内容). 也可以这样理解:同步就是指保证在同一时刻只有一个线程访问同步对象的前提下,确保操作同步对象的线程顺序,跟他们发出访问同步对象请求时的顺序一致. Vector是老版本jkd(1.0的时候就有)的一个集合类,因为Vector是同步的而ArrayList是非同步的,所以Vector的性能比ArrayList要差. 在不需要保证同步的情况下.尽量使用

Java Vector 类

Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况. Vector类支持4种构造方法. 第一种构造方法创建一个默认的向量,默认大小为10: Vector() 第二种构造方法创建指定大小的向量. Vector(int size) 第三种构造方法创建指定大小的向量,并且增量用incr指定. 增量表示向

五:Java之Vector类专题

据说期末考试要考到Vector 这个类,出于复习需要在这里就要好好整理下这个类了. 一.基本概念 Vector 是可实现自动增长的对象数组. java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量.比如在c,c++中所谓的"动态数组"一般都由指针来实现.为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一.事实上,灵活使用数组也可以完成向

vector类转换Mat类

前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat类. 代码: std::vector<int> responses; cv::Mat tres; tres = Mat(responses, true);//vector2mat 该构造函数的定义如下(在mat.hpp文件中): template<typename _Tp> inlin

Vector 类的使用

首先,Vector 类在 java 中可以实现自动增长的对象数组,相比之下使用ArrayList类会比Vector类快,其中ArrayList是非同步的: 其次,如果设计涉及到多线程,还是用Vector更甚一筹. 1.使用Vector 类的代码示例: import java.util.*; /** * 演示Vector的使用.包括Vector的创建.向Vector中添加元素.从Vector中删除元素. * 统计Vector中元素的个数和遍历Vector中的元素. */ public class

stl vector 类

目录 [-]说明构造方法例子vector 类中定义了4中种构造函数: · 默认构造函数,构造一个初始长度为0的空向量,如:vector<int> v1; · 带有单个整形参数的构造函数,此参数描述了向量的初始大小. 说明 vector是一种动态数组,是基本数组的类模板.其内部定义了很多基本操作. #include <vector> 注意:头文件没有“.h”构造: 这个构造函数还有一个可选的参数,这是一个类型为T的实例,描述了各个向量种各成员的初始值: 如:vector<int

重写vector类,完成基本功能,不含迭代器

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil