亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vector.h

?? 一個我的數據結構解題集合
?? H
字號:
#ifndef VECTOR_H__
#define VECTOR_H__

#include <algorithm>	// 使用std::swap
#include <sstream>		// 使用std::stringstream
#include <stdexcept>

template <typename T>
class Vector {
private:

	enum {
		INIT_SIZE = 10		// 初始大小, 必須大于0
	};

	/* 數據內部存儲結構為循環存儲結構
	 * data_	 指向被分配內存的首地址;
	 * begin_	 首個有效數據的下標;
	 * end_		 最后一個有效數據下標邏輯上的后一位
	 * capacity_ 已分配的空間大小
	 *
	 *	數據儲存于 [begin_, end_) 區間內
	 *	以begin_ == end_作為Vector為空標志,
	 *	為data_分配的空間總比實際利用空間多至少1,
	 *	以檢查Vector滿的情況
	 */
	T *data_;
	int begin_;
	int end_;
	int capacity_;

	/* 檢查參數index是否在合法范圍內, 
	 * 若超出范圍, 拋出std::out_of_range異常, 
	 * 否則返回
	 */
	void checkRange(int index) const {
		if ( 0 <= index && index < size() ) return;

		using namespace std;
		// 生成錯誤信息
		stringstream buf;
		buf << "Vector: Index out of range!\n"
			<< "\tSize: "	<< size()
			<< "\tIndex: "	<< index
			<< endl;

		throw out_of_range(buf.str());

	} // checkRange(int) const

	/* 返回邏輯上index的下一個位置
	 */
	int incr(int index) const {
		return (index+1) % capacity_;
	} // incr(int) const

	/* 返回邏輯上index的上一個位置
	 */
	int decr(int index) const {
		if (index == 0)
			return capacity_-1;
		else
			return index-1;
	} // decr(int) const

public:

	/* 構造函數, 初始化Vector使之為空并且有保留INIT_SIZE個T的空間
	 */
	Vector() {
		data_ = new T[INIT_SIZE];
		capacity_ = INIT_SIZE;
		begin_ = end_ = 0;
	} // Vector()

	/* 拷貝構造函數, 從that創建Vector,
	 * 使被創建的Vector所具有的元素和that相同
	 */
	Vector(const Vector& that) {
		capacity_ = that.size() + INIT_SIZE;	// 確定分配空間大小

		data_ = new T[capacity_];	// 分配空間

		// 拷貝數據
		for (int i=0, j=that.begin_; j != that.end_; ++i, j=that.incr(j)) {
			data_[i] = that.data_[j];
		}
		
		// 更新成員數據
		begin_ = 0;
		end_ = that.size();

	} // Vector(const Vector&)

	/* 析構函數, 清理所占用的資源
	 */
	~Vector() {
		delete [] data_;
	} // ~Vector()

	/* 賦值操作將當前Vector賦值為that
	 */
	Vector& operator=(const Vector& that) {
		if (this == &that) return *this;	// 自我賦值

		Vector v(that);		// 拷貝that的值
		swap(v);			// 保存到this

		return *this;
	} // operator=(const Vector&)

	/* 交換兩個Vector的內容
	 */
	void swap(Vector& that) {
		if (this == &that) return;	// 自我交換

		using std::swap;
		swap(data_, that.data_);
		swap(begin_, that.begin_);
		swap(end_, that.end_);
		swap(capacity_, that.capacity_);
	} // swap(Vector&)

	/* 將元素e插入Vector的頭部
	 * 若空間不足自動分配
	 */
	void pushFront(const T& e) {
		if ( size()+1 >= capacity_ )
			reserve(1 + capacity_*1.5);
		data_[decr(begin_)] = e;
		begin_ = decr(begin_);
	} // pushFront(const T&)

	/* 將元素e插入Vector的尾端
	 * 若空間不足自動分配
	 */
	void pushBack(const T& e) {
		if ( size()+1 >= capacity_ )
			reserve(1 + capacity_*1.5);
		data_[end_] = e;
		end_ = incr(end_);
	} // pushBack(const T&)

	/* 將頭部元素刪除
	 * 如果Vector為空, 拋出std::underflow_error異常
	 */
	void removeFront() {
		if (size() <= 0) {
			throw std::underflow_error("Vector: Underflow!\n"
									   "\tOperation: removeFront()\n");
		}
		begin_ = incr(begin_);
	} // removeFront()

	/* 將尾部元素刪除
	 * 如果Vector為空, 拋出std::underflow_error異常
	 */
	void removeBack() {
		if (size() <= 0) {
			throw std::underflow_error("Vector: Underflow!\n"
									   "\tOperation: removeBack()\n");
		}
		end_ = decr(end_);
	} // removeBack()

	/* 查詢頭部元素
	 * 如果Vector為空, 拋出std::out_of_range異常
	 */
	const T& front() const {
		checkRange(0);
		return data_[begin_];
	} // front() const

	/* 查詢尾部元素
 	 * 如果Vector為空, 拋出std::out_of_range異常
	 */
	const T& back() const {
		checkRange(size()-1);
		return data_[decr(end_)];
	} // back() const

	/* 查詢位置為index的元素
	 * 如果index不滿足 0 <= index && index < size(),
	 * 拋出out_of_range異常
	 * 提供const和非const兩個版本
	 */
	T& operator[](int index) {
		checkRange(index);
		return data_[(begin_ + index) % capacity_];
	} // operator[](int)

	const T& operator[](int index) const {
		checkRange(index);
		return data_[(begin_ + index) % capacity_];
	} // operator[](int) const


	/* 預留至少capacity的空間
	 */
	void reserve(int capacity) {
		if (capacity <= capacity_) return;	// 需要的空間已經被滿足

		T *new_data = new T[capacity];		// 分配新的空間

		// 拷貝數據
		int i, j;
		for (i=0, j=begin_; j != end_; ++i, j=incr(j)) {
			new_data[i] = data_[j];
		}

		delete [] data_;					// 釋放舊的空間

		// 更新成員數據
		data_ = new_data;
		capacity_ = capacity;

		begin_ = 0;
		end_ = i;

	} // reserve(int)

	/* 將向量增大到sz大小
	 */
	void enlarge(int sz) {
		reserve(sz+1);
		end_ = (begin_ + sz) % capacity_;
	} // enlarge(int)

	/* 查詢預留空間的大小
	 */
	int capacity() const {
		return capacity_;
	} // capacity() const

	/* 查詢Vector中現存元素的數目
	 */
	int size() const {
		return (begin_ <= end_) ?
			   (end_ - begin_) :
			   (end_ + capacity_ - begin_);
	} // size() const

	/* 查詢Vector是否為空
	 */
	bool isEmpty() const {
		return size() == 0;
	} // isEmpty() const

}; // Vector



#endif // VECTOR_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色欧美日韩亚洲| 亚洲精品在线一区二区| 欧美一级在线视频| 国产精品福利一区| 久久99国产精品免费网站| 一本到不卡精品视频在线观看| 欧美精品一卡二卡| 国产精品久久久久久久久动漫 | 日韩国产在线一| 成人美女视频在线观看18| 日韩亚洲欧美在线| 亚洲一区二区欧美| 色综合久久久久| 国产三级久久久| 国产真实乱偷精品视频免| 欧美日韩一卡二卡| 亚洲免费电影在线| av一区二区三区四区| 久久久久久久综合狠狠综合| 日本成人在线电影网| 在线欧美日韩国产| 亚洲激情综合网| 91免费观看视频| 亚洲桃色在线一区| 91在线观看视频| 国产精品成人一区二区艾草| 成人禁用看黄a在线| 国产欧美精品一区aⅴ影院| 经典一区二区三区| 91精品国产乱| 老司机精品视频线观看86| 欧美电影一区二区三区| 日韩国产精品大片| 欧美成va人片在线观看| 免费观看日韩av| 日韩一区二区免费电影| 免费人成网站在线观看欧美高清| 欧美一级国产精品| 激情欧美日韩一区二区| 国产亚洲一区二区三区在线观看| 精品亚洲国内自在自线福利| 久久亚洲一区二区三区明星换脸| 国产精品一级在线| 国产精品剧情在线亚洲| 91一区二区在线| 亚洲影院免费观看| 3d动漫精品啪啪1区2区免费| 美日韩一级片在线观看| 国产农村妇女精品| 91久久人澡人人添人人爽欧美| 亚洲成在人线免费| 日韩免费看网站| 不卡电影一区二区三区| 亚洲激情图片一区| 日韩欧美一级二级三级久久久| 国产精品资源网站| 亚洲欧美国产三级| 91精品国产一区二区三区蜜臀| 美国毛片一区二区三区| 国产农村妇女精品| 欧美日韩在线免费视频| 裸体歌舞表演一区二区| 久久久久久一级片| 日本高清不卡一区| 日本在线不卡视频| 国产精品传媒视频| 欧美一区二区三区播放老司机| 国产成人免费视频网站| 亚洲与欧洲av电影| 国产日韩欧美一区二区三区综合| 91久久线看在观草草青青| 久久国产三级精品| 一区二区视频在线| 亚洲精品一区二区三区在线观看| 成av人片一区二区| 免费成人av在线播放| 亚洲欧洲日韩女同| xnxx国产精品| 欧美日韩日本视频| 95精品视频在线| 国内精品视频666| 亚洲第一成年网| 亚洲免费在线视频| 国产欧美一二三区| 欧美大片日本大片免费观看| 91福利视频在线| 国产成人精品影院| 久久成人免费日本黄色| 亚洲综合成人在线| 中文字幕欧美一区| 久久久久久久久免费| 777亚洲妇女| 欧美一区二区精品| 日韩不卡一区二区三区| 亚洲欧美一区二区在线观看| 精品免费一区二区三区| 欧美日韩黄色一区二区| 91首页免费视频| 国产高清不卡二三区| 精品一区二区三区欧美| 亚洲福中文字幕伊人影院| 亚洲日本乱码在线观看| 国产精品女同互慰在线看| 精品久久久久久无| 91精品国产品国语在线不卡| 欧美日韩在线电影| 欧美日韩电影在线播放| 欧美日韩激情一区| 欧美精品丝袜久久久中文字幕| 91国偷自产一区二区开放时间| 福利一区福利二区| 成人精品高清在线| 99精品国产视频| 94色蜜桃网一区二区三区| 99久久久国产精品免费蜜臀| 97久久精品人人做人人爽50路| 不卡的av中国片| 91丨porny丨户外露出| 一本一本大道香蕉久在线精品| 色综合天天综合网天天看片| 91亚洲永久精品| 欧美猛男超大videosgay| 欧美日韩日日夜夜| 日韩一区二区免费视频| 2024国产精品视频| 中文字幕中文字幕中文字幕亚洲无线| 国产女主播一区| 亚洲裸体xxx| 日韩在线一区二区三区| 久久精品噜噜噜成人av农村| 国产一区二区剧情av在线| 高清国产午夜精品久久久久久| 99久久久国产精品| 色婷婷狠狠综合| 91精品一区二区三区在线观看| 日韩写真欧美这视频| 国产丝袜欧美中文另类| 一区二区三区四区不卡视频| 亚洲国产日韩一级| 久久精品国产精品亚洲精品| 国产精品一区二区在线播放| www.日韩在线| 欧美日韩亚洲综合在线 | 国产a区久久久| av欧美精品.com| 欧美一区二区精品在线| 欧美精彩视频一区二区三区| 一区二区三区丝袜| 国产一区二区三区美女| 91免费观看在线| 欧美电影精品一区二区| 亚洲日本va午夜在线影院| 视频一区二区三区入口| 成人的网站免费观看| 欧美美女直播网站| 中文字幕久久午夜不卡| 奇米亚洲午夜久久精品| 99久久亚洲一区二区三区青草| 欧美一区二区三区视频免费播放 | 国产亚洲视频系列| 一区二区三区在线观看视频| 韩国v欧美v亚洲v日本v| 在线观看免费视频综合| 国产网站一区二区| 日韩av二区在线播放| 91免费观看在线| 亚洲国产精品v| 麻豆一区二区在线| 精品视频一区二区不卡| 亚洲色图丝袜美腿| 国产精品乡下勾搭老头1| 6080国产精品一区二区| 亚洲欧美色综合| 国产a精品视频| 久久亚洲精品国产精品紫薇| 亚洲国产精品久久久久婷婷884| 白白色 亚洲乱淫| 精品国产乱码久久久久久影片| 亚洲成a天堂v人片| 色系网站成人免费| 国产精品乱码人人做人人爱| 精品一区二区三区日韩| 日韩欧美你懂的| 看电影不卡的网站| 91精品国产丝袜白色高跟鞋| 亚洲国产精品一区二区久久| 成人动漫中文字幕| 中文字幕不卡在线观看| 国产自产高清不卡| 久久日一线二线三线suv| 久久电影网电视剧免费观看| 6080午夜不卡| 麻豆91精品91久久久的内涵| 777欧美精品| 男女男精品视频| 亚洲精品在线电影| 国产成人精品免费在线| 国产拍揄自揄精品视频麻豆| 国产一区二区三区电影在线观看| 精品国产在天天线2019|