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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 14-4.cpp

?? Accelerated C++ 課后練習(xí)題 本人自己完成、可供參考
?? CPP
字號:
#include<iostream>
#include<memory> 
#include<iterator>
#include<string>
using std::cout;
using std::endl;
using std::cin;

template <class T> class Vec
{
public:
	typedef T* iterator;
	typedef const T* const_iterator;
	typedef size_t size_type;
	typedef T value_type;

	Vec() { create(); }
	explicit Vec(size_type n,const T& t=T()) { create(n,t);}
	
	Vec(const Vec& v) { create(v.begin(),v.end()); }
	Vec& operator=(const Vec&);
	~Vec() { uncreate();}

	T& operator[](size_type i) { return data[i]; }
	const T& operator[](size_type i) const {return data[i];}

	void push_back(const T& t)
	{
		if(avail==limit)
			grow();
		unchecked_append(t);
	}

	iterator erase(iterator);
	void clear();

	size_type size() const {return avail-data;}

	iterator begin() { return data;}
	const_iterator begin() const { return data;}

	iterator end() { return avail;}
	const_iterator end() const { return avail; }
private:
	iterator data;		//first element in the Vec
	iterator avail;		//(one past) the last of element in the Vec
	iterator limit;		//(one past) the allocated menory

	//facilities for memory allocation
	std::allocator<T> alloc;	//object to handle memory allocation
	
	//allocation and initialize the underlying array
	void create();
	void create(size_type,const T&);
	void create(const_iterator, const_iterator);

	//destroy the element in the array and free the memory
	void uncreate();

	//support funcions for push_back
	void grow();
	void unchecked_append(const T&);

};

template<class T>
Vec<T>& Vec<T>::operator =(const Vec& rhs)
{
	//check for self-assignment
	if(&rhs!=this)
	{
		//free the array in the left-hand side
		uncreate();
		//copy elements from the right-hand to the left-hand side
		create(rhs.begin(),rhs.end());
	}
	return *this;
}
template <class T> void Vec<T>::create()
{
	data=avail=limit=0;
}
template <class T> void Vec<T>::create(size_type n, const T& val)
{
	data=alloc.allocate(n,0);
	limit=avail=data+n;
	std::uninitialized_fill(data,limit,val);
}
template <class T> 
void Vec<T>::create(const_iterator i,const_iterator j)
{
	data=alloc.allocate(j-i,0);
	limit=avail=std::uninitialized_copy(i,j,data);
}
template <class T> void Vec<T>::uncreate()
{
	if(data)
	{
		//destroy (in reverse orde) the elements that were constructed
		iterator it=avail;
		while(it!=data)
			alloc.destroy(--it);

		//return all the space that was allocated
		alloc.deallocate(data,limit-data);
	}
	//reset pointers to indicate that the Vec is empty again
	data=limit=avail=0;
}
template <class T> void Vec<T>::grow()
{
	//when growing, allocate twice as much space as currently in use
	size_type new_size=std::_MAX(2*(limit-data),ptrdiff_t(1));

	//allocate new space and copy existing elements to the new space
	iterator new_data=alloc.allocate(new_size,0);
	iterator new_avail=std::uninitialized_copy(data,avail,new_data);

	//return the old space
	uncreate();

	//reset pointers to point to the newly allocate space
	data=new_data;
	avail=new_avail;
	limit=data+new_size;
}
template <class T> void Vec<T>::unchecked_append(const T& val)
{
	alloc.construct(avail++,val);
}
template <class T> Vec<T>::iterator Vec<T>::erase(iterator i)
{
	std::copy(i+1,avail,i);
	--avail;
	return i;
}
template <class T> void Vec<T>::clear()
{
	uncreate();
}



template<class T> class Ptr
{
public:
	//to copy the object conditionally when needed
	void make_unique()
	{
		if(*refptr!=1)
		{
			--*refptr;
			refptr=new size_t(1);
			p=p?clone(p):0;
		}
	}

	Ptr():refptr(new size_t(1)),p(0){}
	Ptr(T* t):refptr(new size_t(1)),p(t){}
	Ptr(const Ptr& h):refptr(h.refptr),p(h.p){++*refptr;}

	Ptr& operator=(const Ptr&);
	~Ptr();
	operator bool() const { return p;}
	T& operator*() const;
	T* operator->() const;
private:
	T* p;
	size_t* refptr;
};
template<class T> 
T& Ptr<T>::operator *() const
{
	if(p)
		return *p;
	throw std::runtime_error("unbound Ptr");
}
template<class T> 
T* Ptr<T>::operator ->() const
{
	if(p)
		return p;
	throw std::runtime_error("unbound Ptr");
}
template<class T> 
Ptr<T>& Ptr<T>::operator =(const Ptr& rhs)
{
	++*rhs.refptr;
	//free the left-hand side, destorying pointers if appropriate
	if(--*refptr==0)
	{
		delete refptr;
		delete p;
	}

	//copy in values from the right-hand side
	refptr=rhs.refptr;
	p=rhs.p;
	return *this;
}
template<class T>
Ptr<T>::~Ptr()
{
	if(--*refptr==0)
	{
		delete refptr;
		delete p;
	}
}

Vec<char>* clone(const Vec<char>* vp)
{
    return new Vec<char>(*vp);
}

class Str
{
	friend std::istream& operator>>(std::istream&,Str&);
	friend std::istream& getline(std::istream&,Str&);
public:
	operator bool(){return size()!=0?true:false;}
	Str& operator+=(const Str& s)
	{
		data.make_unique();
		std::copy(s.data->begin(),s.data->end(),std::back_inserter(*data));
		return *this;
	}

	//interface as before
	typedef Vec<char>::size_type size_type;

	//constructors to creator Ptrs
	Str():data(new Vec<char>){}
	Str(const char* cp):data(new Vec<char>)
	{
		std::copy(cp,cp+strlen(cp),std::back_inserter(*data));
	}
	Str(size_type n,char c):data(new Vec<char>(n,c)){}
	template<class In>
	Str(In i,In j):data(new Vec<char>)
	{
		std::copy(i,j,std::back_inserter(*data));
	}

	//call mack_unique as necessary
	char& operator[](size_type i)
	{
		data.make_unique();
		return (*data)[i];
	}
	const char& operator[](size_type i)const{return (*data)[i];}
	size_type size()const{return data->size();}

	const char* c_str() const;
	const char* c_date() const;
	const char* copy(char*,size_type) const;

	typedef Vec<char>::iterator iterator;
	typedef Vec<char>::const_iterator const_iterator;
	iterator begin(){return data->begin();}
	const_iterator begin() const {return data->begin();}
	iterator end(){return data->end();}
	const_iterator end() const {return data->end();}

private:
	//store a Ptr to a vector
	Ptr<Vec<char> > data;
};
std::ostream& operator<<(std::ostream& os, const Str& s)
{
	for(Str::size_type i=0;i<s.size();++i)
		os<<s[i];
	return os;
}
Str operator+(const Str& s,const Str& t)
{
	Str r=s;
	r+=t;
	return r;
}
std::istream& getline(std::istream& is,Str& s)
{
	//obliterate existing value (s)
	s.data->clear();

	//read and discard leading whitespace
	char c;
	while(is.get(c)&&isspace(c))
		;//nothing to do, except testing the condition
		//if still something to read, do so until next whitespace charactor
	if(is)
	{
		do
			s.data->push_back(c);	//compile error! data is private
		while(is.get(c)&&c!='\n');
	}
	return is;
}
const char* Str::copy(char* p,size_type n) const
{
	if(strlen(p)<n)
		throw "benefit!";
	else
	{
		std::copy(data->begin(),data->begin()+n,p);
		return p;
	}
}
const char* Str::c_str() const
{
	char* p=new char[size()];
	std::copy(data->begin(),data->end(),p);
	p[size()]=0;
	return p;
}
const char* Str::c_date() const
{
	char* p=new char[size()-1];
	std::copy(data->begin(),data->end(),p);
	return p;
}
int main()
{
	Str s1="cheng",s2=", ning";
	cout<<(s1+s2)[3]<<endl;
	Str s;
//	getline(cin,s);
//	cout<<s<<endl;
//	if(s)cout<<"Yes!"<<endl;	
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性视频免费网站| 欧美videos中文字幕| 中文字幕在线播放不卡一区| 韩国成人精品a∨在线观看| 日韩视频免费直播| 久久激情五月激情| 国产色综合久久| 99久久99久久精品免费看蜜桃| 国产精品高潮呻吟久久| 色婷婷激情久久| 亚洲444eee在线观看| 欧美一区二区三区男人的天堂| 蜜芽一区二区三区| 国产日本亚洲高清| 色综合久久综合网97色综合| 日韩精品久久久久久| 久久青草欧美一区二区三区| 成人黄色小视频| 一本色道久久加勒比精品| 亚洲一二三四区不卡| 欧美一区二区国产| 岛国精品一区二区| 亚洲成a人v欧美综合天堂| 日韩免费看的电影| 99国产一区二区三精品乱码| 天天做天天摸天天爽国产一区| 日韩欧美国产不卡| 91一区一区三区| 蜜臀91精品一区二区三区| 国产精品―色哟哟| 91精品国产一区二区三区| 国产精品一二三在| 亚洲成av人片www| 国产色综合一区| 7777精品伊人久久久大香线蕉完整版| 国产馆精品极品| 天天免费综合色| 亚洲欧美综合网| 欧美不卡123| 欧洲激情一区二区| 懂色中文一区二区在线播放| 无吗不卡中文字幕| 亚洲欧洲在线观看av| 日韩欧美123| 欧美视频日韩视频| 不卡av免费在线观看| 蜜桃视频第一区免费观看| 一区二区三区加勒比av| 久久精品视频免费观看| 91精品国产入口| ...av二区三区久久精品| 日韩免费看的电影| 欧美日韩亚洲丝袜制服| www.欧美日韩| 国产九九视频一区二区三区| 亚洲图片自拍偷拍| 国产精品久久久久影视| 久久蜜臀精品av| 欧美一区二区黄色| 337p亚洲精品色噜噜噜| 在线中文字幕一区| 色婷婷一区二区三区四区| 成人美女视频在线观看| 国产九九视频一区二区三区| 久久99热国产| 久久se精品一区精品二区| 日本中文字幕一区二区有限公司| 亚洲一区二区三区激情| 亚洲码国产岛国毛片在线| 中文字幕va一区二区三区| 国产日韩精品久久久| 久久九九全国免费| 国产欧美精品区一区二区三区 | 色综合天天综合网天天狠天天| 激情综合网最新| 国内精品伊人久久久久av一坑| 日韩精品一卡二卡三卡四卡无卡| 亚洲国产欧美日韩另类综合 | 91国偷自产一区二区三区观看 | 欧美久久久久久久久| 欧美无人高清视频在线观看| 在线精品视频小说1| 欧美怡红院视频| 欧美日韩中文国产| 4438成人网| 精品国产乱码久久久久久图片| 亚洲精品一区二区在线观看| 久久先锋影音av鲁色资源网| 26uuu精品一区二区| 国产欧美日韩在线| 国产69精品久久777的优势| 成人黄色av网站在线| 成a人片国产精品| 日本丶国产丶欧美色综合| 欧美亚日韩国产aⅴ精品中极品| 欧美性猛片xxxx免费看久爱| 欧美日韩国产一区| 精品国精品国产| 国产精品成人一区二区艾草| 一区二区三区免费| 美女免费视频一区二区| 国产98色在线|日韩| 一本色道久久综合精品竹菊| 欧美精选午夜久久久乱码6080| 日韩亚洲欧美在线| 国产精品久线观看视频| 夜夜嗨av一区二区三区 | 久久成人综合网| 成人妖精视频yjsp地址| 欧美三区在线观看| 精品国产精品网麻豆系列| 国产精品不卡在线| 日本人妖一区二区| 国产99久久久国产精品免费看| 在线免费观看一区| 亚洲精品一区二区在线观看| 亚洲激情第一区| 国产高清久久久| 精品视频在线免费| 日本一区二区三区视频视频| 亚洲国产成人porn| 成人app下载| 肉肉av福利一精品导航| 国产成人在线视频网址| 欧美日韩的一区二区| 欧美国产1区2区| 日韩激情一区二区| 91免费看片在线观看| 欧美大黄免费观看| 一区二区三区中文字幕精品精品 | 精品1区2区在线观看| 亚洲男同性恋视频| 国产一区二区在线影院| 欧美日韩一区二区三区高清| 国产午夜精品美女毛片视频| 日韩影院免费视频| 91福利在线导航| 欧美国产日产图区| 精品一区二区三区日韩| 欧美日韩国产一级二级| 亚洲男人的天堂av| 成人免费视频网站在线观看| 日韩欧美一级精品久久| 亚洲尤物在线视频观看| yourporn久久国产精品| 2014亚洲片线观看视频免费| 视频一区二区三区中文字幕| 色婷婷综合久久久| 亚洲三级久久久| 成人av动漫在线| 国产精品久久久久国产精品日日| 精品一区二区三区免费视频| 欧美一区二区三区在| 天天综合色天天综合色h| 色香蕉久久蜜桃| 中文字幕一区视频| 不卡的电影网站| 日本一区二区综合亚洲| 国产精品亚洲视频| 久久这里只精品最新地址| 日韩欧美亚洲另类制服综合在线| 亚洲一区二区三区中文字幕| 91免费看视频| 亚洲女女做受ⅹxx高潮| 一本到不卡精品视频在线观看| 国产精品国产a| 99久久99久久久精品齐齐| 日韩一区欧美小说| 91亚洲精品一区二区乱码| 国产精品久久久久久久久果冻传媒| 风间由美一区二区三区在线观看 | 亚洲欧美国产77777| 91网站视频在线观看| 亚洲品质自拍视频| 色狠狠综合天天综合综合| 亚洲精选视频免费看| 在线日韩一区二区| 五月开心婷婷久久| 91精品国产欧美日韩| 蜜桃视频第一区免费观看| 精品久久久久久最新网址| 国产一区二区三区免费| 国产精品沙发午睡系列990531| 99久久伊人精品| 亚洲福利视频一区二区| 天天亚洲美女在线视频| 欧美一级xxx| 国产精品69毛片高清亚洲| 国产精品丝袜91| 在线视频一区二区三区| 日韩精品久久久久久| 久久久不卡网国产精品二区| 成人网页在线观看| 亚洲一区二区三区三| 日韩欧美中文字幕一区| 粉嫩蜜臀av国产精品网站| 亚洲激情自拍视频| 日韩一区二区三区电影在线观看| 韩国女主播一区| 一区二区三区四区不卡在线|