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

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

?? buffer.cpp

?? 整理分享:常用的數學運算程序源代碼 包括常用的幾種數學運算程序的C++代碼
?? CPP
字號:
#include <stdio.h>
#include <string.h>
#include <fstream.h>

// 功能:實現buffer.h中的各個緩沖類的函數

#include "buffer.h"
#include "cbuffer.h"

DOUBLE defaulterr = 1e-8; 	// 缺省的誤差調整值
int doadjust = 1;		// 決定數據是否根據誤差值自動向整數靠擾,
							// 其實是向小數點后三位靠擾

/* 下面的六個指針分別初始化指向產生六個緩沖區長度為空的六個
	緩沖區,其中兩個實數緩沖區,兩個長整數緩沖區,兩個復數緩沖區
  其中實數,長整數和復數這三種數據類型的每一種都有磁盤和內存兩種
  緩沖區。如果數據較小時可以存放在內存中,而數據量很大時則存放在
  臨時文件構成的磁盤緩沖區中。這六個空緩沖區并不真正用來存放數據,
  而是用來產生出新的與自己一樣的緩沖區,因為它們都是抽象類buffer的
  子類,所以都將被settomemory函數或者settodisk函數賦給三個buffer類的
  指針,使得getnewbuffer,getnewcbuffer和getnewlbuffer三個函數能夠從這些
  緩沖區中用抽象類函數產生同樣類型的緩沖區。
  總的想法是,在以后編寫的計算各種矩陣或者行列式,或者其它的大量
  數據的運算時,只要調用一次settomemroy或者settodisk函數,那么用戶
  不必改寫一行代碼,就可以照算不誤,而存儲媒體已經改變。
*/
static membuffer *memorybuffer = new membuffer; // 實數內存緩沖區指針
static diskbuffer *diskfilebuffer = new diskbuffer; // 實數磁盤緩沖區指針
static lmembuffer *memorylbuffer = new lmembuffer; // 長整數內存緩沖區指針
static ldiskbuffer *diskfilelbuffer = new ldiskbuffer; // 長整數磁盤緩沖區指針
static memcbuffer *memorycbuffer = new memcbuffer; // 復數內存緩沖區指針
static diskcbuffer *diskfilecbuffer = new diskcbuffer; // 復數磁盤緩沖區指針


/* 以下三個缺省緩沖區指針為全局變量,用戶可以定義自己的緩沖區
	類,并在產生靜態實例變量后將其指針賦予它們 */

buffer *defbuffer = memorybuffer; // 缺省實數緩沖區指針
lbuffer *deflbuffer = memorylbuffer; // 缺省長整數緩沖區指針
cbuffer *defcbuffer = memorycbuffer; // 缺省復數緩沖區指針


/* 產生一個新的容量為n個實數的實數緩沖區,返回此緩沖區指針,
	緩沖區的類型與defbuffer指向的變量的子類類型相同 */
buffer * getnewbuffer(size_t n){
	return defbuffer->newbuf(n);
}

/* 產生一個新的容量為n個長整數的長整數緩沖區,返回此緩沖區指針,
	緩沖區的類型與deflbuffer指向的變量的子類類型相同 */
lbuffer * getnewlbuffer(size_t n){
	return deflbuffer->newbuf(n);
}

/* 產生一個新的容量為n個復數的復數緩沖區,返回此緩沖區指針,
	緩沖區的類型與defcbuffer指向的變量的子類類型相同 */
cbuffer * getnewcbuffer(size_t n){
	return defcbuffer->newbuf(n);
}

// 將各實數,長整數和復數的缺省的緩沖區指針指向相應的磁盤緩沖區指針
void settodisk()
{
	defbuffer = diskfilebuffer;
	deflbuffer = diskfilelbuffer;
	defcbuffer = diskfilecbuffer;
}

// 將各實數,長整數和復數的缺省的緩沖區指針指向相應的內存緩沖區指針
void settomemory()
{
	defbuffer = memorybuffer;
	deflbuffer = memorylbuffer;
	defcbuffer = memorycbuffer;
}

ostream& operator<<(ostream& o, buffer& b)
{
	size_t maxitem = 5;
	for(size_t i=0; i<b.len(); i++) {
		o << b[i] << '\t';
		if(((i+1) % maxitem)==0)
			o << endl;
	}
	o << endl;
	return o;
}


// 將實數緩沖區的第n個實數的值設為d,并返回一個實數緩沖區的
// 指針,此指針一般就是指向自己,而在一個緩沖區的引用數多于一個時
// 此函數將先克隆出一個新的緩沖區,此新的緩沖區的引用數為1,并對此
// 新的緩沖區的第n個實數的值設為d,然后返加新緩沖區的指針
buffer* buffer::set(size_t n, DOUBLE d)
{
	// 如調整標志設置,則調整
	if(doadjust) adjust(d);
	if(refnum == 1) {	// 如果引用數為1,則將第n個實數的值設為d,并返回自己
			// 的指針
		retrieve(n) = d;
		return this;
	}
	refnum --;	// 引用數大于1,因此將本緩沖區的引用數減1
	buffer * b;
	b = clone();	// 克隆一個內容同自己一樣的新緩沖區
	(b->retrieve(n)) = d; // 將新緩沖區的第n個實數的值設為d
	return b;	// 返回新緩沖區的指針
}

buffer* membuffer::clone() // 克隆一個內容和自己一樣的實數內存緩沖區,并返回其指針
{
	buffer* b;
	b = new membuffer(length);	// 建立一個新的實數內存緩沖區,尺寸和自己的一樣
	if(length > 0)	// 如果自己有內容,將全部拷貝到新產生的緩沖區中
		for(size_t i=0; i<length; i++)
			(b->retrieve(i)) = (*this)[i];
	return b;
}

// 實數磁盤緩沖區構造函數
diskbuffer::diskbuffer(size_t lth):buffer(),length(lth),n(0)
{
	tempfp = tmpfile();	// 打開一新的臨時文件,指針賦給tempfp
}

// 實數磁盤緩沖區的析構函數
diskbuffer::~diskbuffer()
{
	fclose(tempfp);	// 關閉臨時文件
}

void diskbuffer::alloc(size_t num) // 將磁盤緩沖區重新定為尺寸為num
{
	length = num;
	if(!tempfp)	 // 如果臨時文件尚未打開,則打開臨時文件
		tempfp = tmpfile();
	n = 0;	// 當前緩沖區指針設在開始,就是0處
}

void diskbuffer::release() // 釋放磁盤緩沖區
{
	fclose(tempfp);	// 關閉臨時文件
	buf = 0.0;
	length = 0;
}

DOUBLE& diskbuffer::retrieve(size_t i) // 返回實數磁盤緩沖區的第i個實數
{
	long off;
	off = n*sizeof(DOUBLE); // 計算出當前指針n對應的文件的偏移量
	fseek(tempfp, off, SEEK_SET); // 移動文件指針到給定的偏移量處
	fwrite(&buf, sizeof(DOUBLE), 1, tempfp); // 將當前的buf中值寫到文件中
	off = i*sizeof(DOUBLE); // 計算第i個實數在文件的什么位置
	fseek(tempfp, off, SEEK_SET); // 移動文件指針到給定的偏移量處
	fread(&buf, sizeof(DOUBLE), 1, tempfp); // 讀回所需的實數值到buf中
	n = i;	// 并將n改為i
	return buf; // 返回讀出的實數的引用
}

buffer* diskbuffer::clone() // 克隆一個新的內容與自己一樣的實數磁盤緩沖區
{
	buffer* b;
	b = new diskbuffer(length); // 定位產生一個與自己長度一樣的新緩沖區
	if(length > 0)	// 如果長度大于0,則自己的內容拷貝到新緩沖區
		for(size_t i=0; i<length; i++)
			(b->retrieve(i)) = (*this)[i];
	return b; // 返回新緩沖區的指針
}


// 將第n個長整數的值設為v,如果緩沖區的引用數大于1,
// 則會先克隆出新的緩沖區,然后再進行操作,并返回新緩沖區的指針
lbuffer* lbuffer::set(size_t n, long v)
{
	if(refnum == 1) { //  引用數為1
		retrieve(n) = v; // 將第n個長整數的值設為v
		return this;	// 返回自己
	}
	refnum --;		// 引用數大于1,引用數減1
	lbuffer * b;
	b = clone();	// 克隆出新的內容一樣的長整數緩沖區
	(b->retrieve(n)) = v; // 將新緩沖區的第n個長整數值設為v
	return b;	// 返回新緩沖區的指針
}

ostream& operator<<(ostream& o, lbuffer& b)
{
	size_t maxitem = 5;
	for(size_t i=0; i<b.len(); i++) {
		o << b[i] << '\t';
		if(((i+1) % maxitem)==0)
			o << endl;
	}
	o << endl;
	return o;
}

lbuffer* lmembuffer::clone() // 克隆一個內容一新的長整數內存緩存區
{
	lbuffer* b;
	b = new lmembuffer(length);	// 產生長度與自己一樣的長整數緩存區
	if(length > 0)	// 如果長度大于0,則將自己的內容拷貝過去
		for(size_t i=0; i<length; i++)
			(b->retrieve(i)) = (*this)[i];
	return b;	// 返回新緩存區的指針
}

// 長整數磁盤緩存區的構造函數
ldiskbuffer::ldiskbuffer(size_t lth):lbuffer(),length(lth),n(0)
{
	tempfp = tmpfile();	// 打開臨時文件
}

// 長整數磁盤緩存區的析構函靈敏
ldiskbuffer::~ldiskbuffer()
{
	fclose(tempfp);	// 關閉臨時文件
}

// 將長度定改為num
void ldiskbuffer::alloc(size_t num)
{
	length = num;
	if(!tempfp) // 如臨時文件尚未打開,則打開
		tempfp = tmpfile();
	n = 0;
}

// 長整數磁盤緩存區釋放
void ldiskbuffer::release()
{
	fclose(tempfp);	// 關閉臨時文件
	buf = 0;
	length = 0;
}

// 檢索第i個值的引用
long& ldiskbuffer::retrieve(size_t i)
{
	long off;
	off = n*sizeof(long); // 先將當前的內容保存
	fseek(tempfp, off, SEEK_SET);
	fwrite(&buf, sizeof(long), 1, tempfp);
	off = i*sizeof(long);	// 再取出第i個長整數到buf中
	fseek(tempfp, off, SEEK_SET);
	fread(&buf, sizeof(long), 1, tempfp);
	n = i;
	return buf;
}

// 克隆一個和內容和自己一樣的長整數磁盤緩存區
lbuffer* ldiskbuffer::clone()
{
	lbuffer* b;
	b = new ldiskbuffer(length); // 產生長度和自己一樣的緩存區
	if(length > 0)	// 如果自己內容不為空,拷貝內容到新的緩存區
		for(size_t i=0; i<length; i++)
			(b->retrieve(i)) = (*this)[i];
	return b;
}

DOUBLE adjust(DOUBLE & a) // 將實數調整為最靠近小數點后二位的實數
// 準則:如果一個實數距某個二位小數小于十的負八次冪,則調整為這個小數
// 否則不變
{
	DOUBLE b = floor(a*100.0+0.5)/100.0; // b是四舍五入到小數點后二位
	if(fabs(b-a)<defaulterr) // 如果舍入誤差極小,則拋棄
		a = b;
	return a;
}

char * throwmessage(int l, char * f, char * c)
{
	static char a[100];
	sprintf(a,"file:%s,line:%d\nmessage:%s\n",f,l,c);
	return a;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级二级三级精品视频| 国产精品一区二区91| 久久久久久**毛片大全| 欧美一级在线观看| 777亚洲妇女| 日韩欧美国产小视频| 日韩欧美精品三级| 日韩一区二区三区三四区视频在线观看| 欧美主播一区二区三区美女| 91久久精品一区二区三区| 色婷婷综合久久久中文字幕| 91福利国产精品| 欧美日韩在线三级| 日韩片之四级片| 国产亚洲成aⅴ人片在线观看| 中文字幕不卡的av| 国产视频一区在线观看| 国产精品三级视频| 一区二区在线观看av| 亚洲国产一区二区三区青草影视| 午夜精品久久久久久久久| 日本亚洲免费观看| 国产精品一级片在线观看| 99久久国产综合色|国产精品| 色8久久精品久久久久久蜜| 欧美精品tushy高清| 精品国精品自拍自在线| |精品福利一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 日韩av高清在线观看| 国产成人在线网站| 色激情天天射综合网| 日韩女同互慰一区二区| 国产精品久久久久久久久动漫| 亚洲国产成人av好男人在线观看| 精品一区二区在线观看| 99精品视频在线观看| 91精品国产手机| 1区2区3区欧美| 久久激情五月婷婷| 色综合久久久久综合体桃花网| 日韩一区二区三区视频在线观看| 国产精品久久久久一区二区三区| 偷窥国产亚洲免费视频| 不卡的av电影在线观看| 91精品国产91久久综合桃花| 日韩一区欧美一区| 韩国av一区二区三区| 精品视频1区2区3区| 国产精品私人影院| 美腿丝袜亚洲色图| 欧美午夜不卡视频| 亚洲国产精品成人综合| 开心九九激情九九欧美日韩精美视频电影| a美女胸又www黄视频久久| 欧美精品一区二| 日韩在线a电影| 91高清视频在线| 国产精品久线观看视频| 国产一区二区看久久| 日韩一区二区中文字幕| 午夜伦欧美伦电影理论片| av日韩在线网站| 国产欧美一区二区精品忘忧草| 久久成人18免费观看| 欧美精品aⅴ在线视频| 亚洲一二三四在线| 99久久久精品免费观看国产蜜| 国产偷国产偷亚洲高清人白洁 | 欧美成人性福生活免费看| 亚洲精品中文字幕在线观看| 国产成人免费视频网站| 国产亚洲美州欧州综合国| 韩国女主播成人在线观看| 日韩欧美一级在线播放| 奇米精品一区二区三区四区| 7777女厕盗摄久久久| 亚洲成a人片在线不卡一二三区| 99v久久综合狠狠综合久久| 国产精品久久久久9999吃药| 北岛玲一区二区三区四区| 国产精品伦理一区二区| 成人激情av网| 亚洲视频免费观看| 欧美午夜精品一区二区蜜桃| 亚洲综合在线视频| 精品污污网站免费看| 日韩国产一区二| 欧美哺乳videos| 国产成人免费在线观看| 欧美激情综合在线| 99re免费视频精品全部| 亚洲一区二区三区四区在线观看| 欧美日韩国产影片| 日本视频中文字幕一区二区三区| 欧美电影免费观看完整版| 狠狠色丁香久久婷婷综合丁香| 久久亚洲二区三区| 成人免费视频国产在线观看| 亚洲少妇中出一区| 欧美卡1卡2卡| 国产在线视频精品一区| 1区2区3区欧美| 欧美久久婷婷综合色| 国产一区二三区好的| 中文字幕日韩精品一区| 欧美日高清视频| 国产精品自拍毛片| 一区二区三区精品| 欧美v日韩v国产v| 99国产精品99久久久久久| 日本午夜一区二区| 中文在线一区二区| 欧美一区二区三区系列电影| 国产成人8x视频一区二区| 一区二区欧美视频| 337p粉嫩大胆色噜噜噜噜亚洲| 色天天综合色天天久久| 国产做a爰片久久毛片| 一区二区久久久| 久久众筹精品私拍模特| 欧美日韩国产另类一区| 成人国产精品视频| 免费美女久久99| 亚洲卡通动漫在线| 欧美国产激情一区二区三区蜜月| 欧美精品xxxxbbbb| 91色综合久久久久婷婷| 国产福利一区二区三区在线视频| 亚洲国产精品影院| 国产精品久久久久永久免费观看 | 欧美成人女星排名| 91福利区一区二区三区| jiyouzz国产精品久久| 国产一区二区三区| 男人的天堂久久精品| 亚洲国产精品久久人人爱蜜臀| 国产精品久久看| 久久精品一区二区三区不卡牛牛| 欧美一区二区三区爱爱| 欧美性极品少妇| av网站免费线看精品| 成人污污视频在线观看| 国产在线精品国自产拍免费| 老司机免费视频一区二区| 午夜精品福利一区二区三区av | 色香蕉久久蜜桃| 国产成人精品免费看| 六月丁香综合在线视频| 麻豆免费精品视频| 五月天久久比比资源色| 亚洲成人免费视频| 亚洲无线码一区二区三区| 亚洲中国最大av网站| 亚洲电影中文字幕在线观看| 一区二区三区四区激情| 伊人色综合久久天天人手人婷| 亚洲久草在线视频| 亚洲免费视频成人| 夜夜精品视频一区二区| 亚洲国产一区在线观看| 午夜久久久影院| 美女视频网站黄色亚洲| 韩国成人福利片在线播放| 国产大陆a不卡| 成人午夜电影久久影院| 91视视频在线观看入口直接观看www | 欧美一级高清大全免费观看| 欧美精品黑人性xxxx| 日韩一区二区三区在线观看| 欧美v亚洲v综合ⅴ国产v| 久久久夜色精品亚洲| 中文字幕成人网| 亚洲另类中文字| 日韩精品一二区| 国产精品一区二区黑丝| 97久久精品人人爽人人爽蜜臀| 欧美亚洲一区二区三区四区| 91精品国产91热久久久做人人| 久久久久久久久蜜桃| 亚洲裸体xxx| 日韩av一区二区三区四区| 国产丶欧美丶日本不卡视频| 一本久久综合亚洲鲁鲁五月天| 欧美精品电影在线播放| 日本一区二区综合亚洲| 夜夜亚洲天天久久| 老司机精品视频一区二区三区| 成人午夜碰碰视频| 欧美日韩亚洲综合| 精品蜜桃在线看| 亚洲欧美一区二区久久| 美女www一区二区| av在线不卡电影| 91精品国产福利| 国产精品久久久久久久久果冻传媒| 午夜日韩在线观看| 不卡一二三区首页| 91精品国产乱| 亚洲美女淫视频|