20120918-向量实现《数据结构与算法分析》

#include <iostream>
#include <list>
#include <string>
#include <vector>
#include <bitset>
using namespace std;

template <typename Container,typename Object>
void change(Container & c,const Object & newValue)//改变新值
{
	typename Container::ierator itr = c.begin();
	while( itr != c.end())
	{
		*itr++ = newValue;
	}
}

template <typename Container,typename Object>
void print(const list<int> & lst,ostream & out = cout)//打印值,并且归0
{
	typename Container::iterator itr = lst.begin();
	while( itr != lst.end())
	{
		cout<<*itr<<endl;
		*itr=0;
		itr++;
	}
}

template <typename Container>
void printCollection( const Container & c)//打印任何容器
{
	if (c.empty())
		cout<<"(empty)";
	else
	{
		typename Container::const_iterator itr = c.begin();
		cout << "[" << *itr++;

		while(itr != c.end())
		{
			cout << ","<<*itr++;
		}

		cout<<"]"<<endl;
	}
}
template <typename Object>//Vector类向量实现
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()
		{
			delet [] objects;
		}
		
		const Vector & operator = (const Vector & rhs)
		{
			if(this != &rhs)
			{
				delete [] objects;
				theSize = rhs.size();
				theCapacity = rhs.theCapacity();

				objects = new Object[ capacity() ];
				for(int k=0; k<size() ; k++)
					objects[k] = rhs.objects[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 *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 theCaacity;
			Object *objects;
}
int main()
{
	list<string> a;
	list<int> b;
	list<int> c;
	c.push_back(123);
	a.push_back("123");
	a.push_back("ooo");
	a.push_back("456");
	a.push_back("ooo");
	a.push_back("789");
	printCollection(a);
	printCollection(b);
	printCollection(c);
	return 0;
}

  前两部分是list的应用

  后一部分是vector的实现方法:可惜我不会直接测试...不知道怎么直接用.....

  今天不知道怎么的,莫名的很生气.....fuck

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落花落雨不落叶

leetcode 34. Search for a Range

30960
来自专栏计算机视觉与深度学习基础

Leetcode 179 Largest Number

Given a list of non negative integers, arrange them such that they form the lar...

263100
来自专栏Java工程师日常干货

对HashMap的思考及手写实现前言对HashMap的思考通过写一个迷你版的HashMap来深刻理解

HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设...

10220
来自专栏计算机视觉与深度学习基础

Leetcode 215. Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth larg...

228100
来自专栏王磊的博客

Java核心(四)面试必备—你不知道的数据集合

导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧!

10620
来自专栏Android机动车

数据结构学习笔记——队列

线性表有顺序存储和链式存储,栈是线性表,所以有这两种存储方式。同样,队列作为一种特殊的线性表,也同样存在这两种存储方式。

5810
来自专栏一个会写诗的程序员的博客

FastJson中@JSONField注解使用FastJson中@JSONField注解使用

如果json格式数据不符合Java中的标准驼峰式变量定义规则,并且难以理解,这个时候就需要在后台中做二次处理,将数据处理成我们系统中定义的格式。

17330
来自专栏codingforever

经典算法巡礼(七) -- 排序之堆排序

很多时候,我们需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序。比如你可能启动了若干个定时器,那么下一次处理定时器事件只需要考虑距离现...

7620
来自专栏阿杜的世界

Java并发-CopyOnWriteArrayList前言CopyOnWriteArrayList API例子1:插入(删除)数据的同时进行遍历例子2:不支持一边遍历一边删除结论参考资料

今天我们一起学习下java.util.concurrent并发包里的CopyOnWriteArrayList工具类。当有多个线程可能同时遍历、修改某个公共数组时...

15630
来自专栏一英里广度一英寸深度的学习

二叉树的深度优先遍历与广度优先遍历

先遍历子节点,再遍历兄弟节点。 从根节点开始递归,如果存在子节点,继续遍历子节点。

75030

扫码关注云+社区

领取腾讯云代金券