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

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

?? 12-(3-8).cpp

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

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
	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;
	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=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=_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=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();
}



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

	typedef Vec<char>::size_type size_type;
	
	//default constructor ;create an empty Str
	Str(){}

	//create a Str containing  n copies c
	Str(size_type n,char c):data(n,c){}

	//create s Str from a null-teminated array of char
	Str(const char* cp)
	{
		std::copy(cp,cp+strlen(cp),std::back_inserter(data));
	}

	//create a Str from the rang denoted by iterators b and e
	template<class In> Str(In b,In e)
	{
		std::copy(b,e,std::back_inserter(data));
	}

	char& operator[](size_type i){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:
	Vec<char> data;
};

istream& getline(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;
}
ostream& operator<<(ostream& os, const Str& s)
{
	for(Str::size_type i=0;i<s.size();++i)
		os<<s[i];
	return os;
}

istream& operator>>(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)&&!isspace(c));

		//if we read whitespace, then put it back on the stream
		if(is)
			is.unget();
	}
	return is;
}

Str operator+(const Str& s,const Str& t)
{
	Str r=s;
	r+=t;
	return r;
}
int strcmp(const Str& s1,const Str& s2)
{
	return strcmp(s1.c_str(),s2.c_str());
}
bool operator==(const Str& s1,const Str& s2)
{
	return strcmp(s1,s2)==0?true:false;
}
bool operator!=(const Str& s1,const Str& s2)
{
	return strcmp(s1,s2)!=0?true:false;
}

int main()
{
	Str s1="cheng";
	Str s2="cheng";
	Str s3=s1+" ning!";
	Str s4;
	for(Str::iterator i=s3.begin();i!=s3.end();++i)
		cout<<*i<<"  ";
	cout<<endl;

	getline(cin,s4);
	cout<<s4<<endl;
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女www爽爽爽| 亚洲午夜久久久| 欧美老女人在线| 国产激情一区二区三区四区| 一区二区三区欧美视频| 久久久久国产精品麻豆ai换脸 | 一区二区三区在线影院| 日韩精品一区二区三区视频在线观看| a亚洲天堂av| 国内成+人亚洲+欧美+综合在线| 亚洲精品免费在线| 国产精品网站在线播放| 欧美tickle裸体挠脚心vk| 欧美色大人视频| 成人avav影音| 国产福利一区在线| 国模冰冰炮一区二区| 日日嗨av一区二区三区四区| 亚洲男人的天堂在线aⅴ视频| 久久久久国产免费免费| 精品理论电影在线| 555www色欧美视频| 欧美日韩成人高清| 欧美性一级生活| 色欧美88888久久久久久影院| 成人一区二区三区视频| 国产盗摄精品一区二区三区在线| 精品亚洲成a人在线观看| 日韩成人伦理电影在线观看| 性做久久久久久久免费看| 亚洲欧美日韩国产中文在线| 综合色天天鬼久久鬼色| 国产精品乱码一区二区三区软件 | 国产综合久久久久影院| 麻豆freexxxx性91精品| 日本sm残虐另类| 另类小说图片综合网| 麻豆久久久久久久| 另类小说视频一区二区| 久久99国产精品免费| 久久se精品一区二区| 国精产品一区一区三区mba视频 | 欧美一区二区日韩一区二区| 欧美日韩国产一区| 日韩午夜激情免费电影| 欧美mv和日韩mv的网站| xnxx国产精品| 欧美国产1区2区| 亚洲欧美日韩国产手机在线 | 亚洲精选免费视频| 亚洲女同ⅹxx女同tv| 亚洲bdsm女犯bdsm网站| 蜜臀99久久精品久久久久久软件| 捆绑变态av一区二区三区| 国内精品不卡在线| 波多野结衣中文字幕一区| 色综合天天做天天爱| 欧洲亚洲国产日韩| 欧美高清视频不卡网| 日韩精品中文字幕一区二区三区| 国产亚洲精品中文字幕| 国产精品福利一区二区三区| 亚洲精品一二三| 日韩影视精彩在线| 国产精品原创巨作av| av电影在线不卡| 欧美精品一卡两卡| 久久久久久久久久久电影| 亚洲人xxxx| 美女一区二区在线观看| 国产成人精品1024| 91久久精品一区二区三| 欧美精品久久99久久在免费线| 精品入口麻豆88视频| 国产精品久久久久久久久免费樱桃 | 91精品国产一区二区| 精品少妇一区二区三区在线播放| 国产精品免费久久| 日韩福利视频导航| 成人小视频免费在线观看| 欧美在线观看你懂的| 久久色成人在线| 亚洲aⅴ怡春院| 成人黄色在线看| 欧美日韩国产高清一区| 亚洲国产激情av| 日本三级韩国三级欧美三级| 粉嫩aⅴ一区二区三区四区五区| 欧美吻胸吃奶大尺度电影| 国产午夜精品久久久久久免费视| 亚洲午夜久久久久久久久久久| 国产成人亚洲精品青草天美| 欧美猛男超大videosgay| 欧美经典一区二区| 日韩成人精品在线| 色综合天天综合在线视频| 久久综合久久99| 午夜视频一区二区三区| 99视频热这里只有精品免费| 日韩免费高清电影| 亚洲乱码一区二区三区在线观看| 人人精品人人爱| 欧美色电影在线| 中文字幕五月欧美| 国内精品国产成人| 91精品国产综合久久国产大片| 久久精品在这里| 青青草成人在线观看| 在线国产亚洲欧美| 国产精品传媒在线| 国产一区二区不卡在线| 日韩欧美国产一区二区三区| 一区二区成人在线观看| 成人av综合一区| 久久精品水蜜桃av综合天堂| 日本色综合中文字幕| 欧美日韩在线综合| 亚洲精品视频在线看| 北条麻妃国产九九精品视频| 国产精品欧美一区二区三区| 成人av网站免费| 1区2区3区精品视频| 韩国三级在线一区| 欧美xxxxxxxx| 精品一区二区三区在线视频| 欧美一区二区三区四区五区| 亚洲一二三四在线| 欧美午夜一区二区| 亚洲午夜精品在线| 欧美少妇性性性| 亚洲成av人片| 欧美日韩不卡在线| 琪琪一区二区三区| 欧美成人三级电影在线| 久久国产人妖系列| 精品国产sm最大网站免费看| 韩国三级在线一区| 国产网红主播福利一区二区| 国产精品 欧美精品| 中文字幕国产一区| 91在线视频官网| 一区二区三区在线免费播放| 91成人免费电影| 亚洲成人激情综合网| 91 com成人网| 另类综合日韩欧美亚洲| 久久久一区二区| www.久久精品| 一区二区成人在线观看| 91精品国产综合久久久久久久 | 亚洲欧美国产高清| 在线观看视频一区二区欧美日韩| 亚洲成人资源网| 欧美r级在线观看| 高清国产一区二区| 亚洲一区二区四区蜜桃| 911精品产国品一二三产区| 久久国产尿小便嘘嘘| 国产精品人妖ts系列视频| voyeur盗摄精品| 午夜电影网一区| 久久久久久久久久久电影| 91在线观看高清| 日韩不卡免费视频| 久久九九久精品国产免费直播| 97久久精品人人做人人爽| 天堂成人免费av电影一区| 久久综合成人精品亚洲另类欧美 | 人人爽香蕉精品| 欧美经典一区二区| 欧美视频在线不卡| 国产在线国偷精品免费看| 亚洲欧美偷拍三级| 日韩欧美一级特黄在线播放| 高清在线成人网| 欧美三区在线视频| 激情成人综合网| 亚洲精品亚洲人成人网| 欧美成va人片在线观看| 色综合天天综合网国产成人综合天| 亚洲va在线va天堂| 亚洲国产精品高清| 欧美日本韩国一区二区三区视频| 国产aⅴ精品一区二区三区色成熟| 亚洲成人午夜影院| 国产精品乱子久久久久| 日韩欧美在线影院| 91视频一区二区三区| 精品在线一区二区| 亚洲国产一区二区三区| 国产视频一区二区三区在线观看| 欧美视频一区二区三区四区| 国产一区二区美女诱惑| 亚洲国产一区二区在线播放| 欧美激情综合在线| 欧美成人官网二区| 91黄色免费看| 成人手机电影网| 久久精品国产99国产| 亚洲小少妇裸体bbw|