数据结构与算法分析 c++ P75 Vector 实现


   按书中的方式,实现一下简单的Vector ,加深理解。

#pragma once
#include <algorithm>

template <typename Object>
class Vector {
public :
	explicit Vector(int initSize = 0) : theSize(initSize),theCapacity(initSize+SPARE_CAPACITY) { }
	Vector(const Vector & rhs) : theSize(rhs.theSize), theCapacity(rhs.theCapacity), objects(nullptr)
	{
		objects = new Object[theCapacity];
		for (int k = 0; k < theSize; ++k)
			objects[k] = rhs.objects[k];
	}
	Vector & operator = (const Vector & rhs)
	{
		Vector copy = rhs;
		std::swap(*this, copy);
		return *this;
	}

	~Vector() { delete[] objects; }

	Vector(Vector && rhs) : theSize(rhs.theSize), theCapacity(rhs.theCapacity), objects(rhs.objects)
	{
		rhs.objects = nullptr;
		rhs.theSize = 0;
		rhs.theCapacity = 0;
	}

	Vector & operator = (Vector && rhs)
	{
		std::swap(theSize, rhs.theSize);
		std::swap(theCapacity, rhs.theCapacity);
		std::swap(objects, rhs.objects);
		return *this;
	}
	void resize(int newSize)
	{
		if (newSize > theCapacity)
			reserve(newSize * 2);
		theSize = newSize;
	}

	void reserve(int newCapacity)
	{
		if (newCapacity < theSize)
			return;
		Object *newArray = new Object[newCapacity];
		for (int k = 0; k < theSize; ++k)
			newArray[k] = std::move(objects[k]);
		theCapacity = newCapacity;
		std::swap(objects, newArray);
		delete[] newArray;
	}

	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 push_back(Object && x)
	{
		if (theSize == theCapacity)
			reserve(2 * theCapacity + 1);

		objects[theSize++] = std::move(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()]; }

	static const int SPARE_CAPACITY = 16;
private:
	int theSize;
	int theCapacity;
	Object * objects;

};


#include <iostream>
#include <string>
#include "Vector.h"

using namespace std;

int main()
{
	Vector<string> sentence;

	sentence.reserve(5);

	sentence.push_back("Hello ");
	sentence.push_back("Everyone!");
	sentence.push_back("How are you!");

	std::cout << " size(): " << sentence.size() << endl;
	std::cout << " capacity(): " << sentence.capacity() << endl;

	std::cout << " back(): " << sentence.back() << endl;

	sentence.pop_back();
	std::cout << " size(): " << sentence.size() << endl;
	std::cout << " capacity(): " << sentence.capacity() << endl;

	sentence.resize(20);
	std::cout << " size(): " << sentence.size() << endl;
	std::cout << " capacity(): " << sentence.capacity() << endl;

	auto iter = sentence.begin();
	while (iter != sentence.end())
	{
		std::cout << *iter++ << endl;
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值