vector容器的实现

简单实现了构造、析构、push_back、pop_back、operator=、operator[]、clear等函数

template<class T>
class my_vector {
private:
	int count;
	int alloc_size;
	T *arr;
public:
	my_vector():count(0),alloc_size(0),arr(NULL)
	{
	}
	my_vector(int n, T ele): count(0),alloc_size(n)
	{
		arr = new T[n];
		while(n--)
		{
			push_back(ele);
		}
	}
	my_vector(const my_vector &other):count(0),alloc_size(0),arr(NULL)
	{
		*this = other;
	}

	my_vector<T>& operator=(const my_vector &other)
	{
		count = other.size();
		alloc_size = count;
		T *oldarr = arr;
		arr = new T[count];
		for(int i = 0; i < count; i++)
			arr[i] = other[i];
		delete []oldarr;
	}

	void push_back(T ele)
	{
		if(count == alloc_size)
		{
			T *oldarr = arr;
			int new_size;
			if(alloc_size == 0)
				new_size = 1;
			else
				new_size = alloc_size*2;

			arr = new T[new_size];
			for(int i = 0; i < count; i++)
			{
				arr[i] = oldarr[i];
			}
			alloc_size = new_size;
			delete []oldarr;
		}
		arr[count] = ele;
		count++;
	}

	void pop_back()
	{
		if(count > 0)
			count--;
	}

	int size()
	{
		return count;
	}

	T& operator[](int pos)
	{
		assert(pos < count);
		return arr[pos];
	}

	void clear()
	{
		count = 0;
	}

	~my_vector()
	{
		count = 0;
		alloc_size = 0;
		delete []arr;
		arr = NULL;
	}

};
时间: 2024-12-13 18:00:03

vector容器的实现的相关文章

Vector容器 和 iteration 迭代器

vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的. 使用vector之前,必须包含相应的头文件.#include <vector> using std::vector; vector是一个类模板(class template).模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上.

vector容器用法详解

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元

谈谈vector容器的三种遍历方法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组.在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法. 方法一:采用下标遍历 由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容

C++ STL vector容器学习

STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v

STL学习二:Vector容器

1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加或移除元素非常快速.但是在中部或头部插入元素或移除元素比较费时. 2.vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT; vector<int> vecInt;          //一个存放int的vector容器

ACM学习历程—BestCoder 2015百度之星资格赛1002 列变位法解密(vector容器)

Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文. 比如: 原文:123456789 密钥:4 变换后的矩阵: 1234 5678 9xxx (最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同) 密文:159263748 再比如: 原文:Hello, welcome to my dream w

UVA 1412 - Fund Management(用vector容器模拟状态的状压dp)

Frank is a portfolio manager of a closed-end fund for Advanced Commercial Markets (ACM ). Fund collects money (cash) from individual investors for a certain period of time and invests cash into various securities in accordance with fund's investment

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

vector容器做形参

/*容器做参数*/ void func(vector <int> &vecTest){ for(int i=0;i<10;i++) vecTest.push_back(i); } vector容器做形参,布布扣,bubuko.com

vector 容器迭代器(二)

vector容器迭代器(一)里面大牛对vector介绍的已经很详细了,下面结合自己的项目开发的问题谈谈使用 一.关于capacity和size[1] 在下想用数组引用的方式遍历vector中的元素,结果一直采用capacity,最后的结果就是总是出错,查了半天才知道原来这个capacity是只扩不收的,我因为 需要删除了vector(采用erase,第三部分)中的数,但是capacity没有更新,结果我按照capacity的指示寻找元素,明显就会越界 [1] ---->Size指目前容器中实际有