Hw3 C++指令使用
memset
原型:void *memset(void *buffer, int c, int count);
功能:把buffer所指內存區域的前count個字節設置成字符c。
傳回值:返回指向buffer的指針。單冒號
1.表示機構內位域的定義(即該變數占幾個bit空間)
ex:unsigned char a:4;
2.constructor後面的冒號起分割作用,是類給成員變數賦值的方法(使用初始串列),初始化清單,更適用于成員變數的常量const型
-->初值串列在建構函數的名稱之後,加上一個冒號,然後是變數成員與小括弧中的參數 (parameter)
3.public:和private:後面的冒號,表示後面定義的所有成員都是公有或私有的,直到下一個"public:」或"private:」出現為止。
"private:"為預設處理
4.類名冒號後面的是用來定義類的繼承雙冒號
定義class裡的“函式”
若在class內的函數定義超過兩行,則寫在class外面更為簡潔檔案操作
fopen()會使用緩衝區來減少對磁碟的實際I/O,以加快檔案讀寫效率,所以在程式中進行讀寫動作時,實際上會先對緩衝區作存取,而非實際的磁碟,所以不使用檔案時,一定要記得關閉檔案,關閉檔案會將緩衝區中的資料真正寫入磁碟,若忘了關閉檔案,可能會造成資料的遺失。
開啟檔案之後,可以使用fgetc()來讀取檔案中的字元,使用fputc()來將字元寫入檔案,fgetc()傳入FILE實例的位址值,每執行一次就會從檔案中讀取一個字元,直到讀到檔尾(End of File, EOF)為止,可由返回值來判斷是否讀到檔尾。sscanf
int sscanf( const char *buffer, const char *format, ... );
scanf跟sscanf差別:-->scanf是從input的buffer裡來讀取特定格式輸入
sscanf則是從**給定的buffer**來讀取特定格式輸入
format格式:{ %[*][width][{h | l | I64 | L}]type |非%符号}
其中,
1.如果在%後面加一個*就是要讀入可是不會存到變數裡的意思,例如說%*d,%*c。 ※ 注意!正確過濾掉的字元不會算入回傳的正確個數之中。- {a|b|c}就表示a,b,c選一個,[d]則是有無都可以。
- width:代表讀取限制的長度。
- {h | l | I64 | L}:參數的bytes size,h通常是1bytes,I代表2bytes,L代表4bytes,I64則是8bytes(不過double算是個例外)。
- type:就看是什麼了%s, %d, %f, %lf...,或者是代表一個集合[]。例如:
%[a-z]表示讀入的只包含a到z中的字元。%[abc]表示讀入的只包含abc三種字元%[^a]表示讀入的不包含字元a
※ 注意!%s其實跟%[^\n\t]是等價的
※%[^a]其實並不會讀掉a,只會讀到a的前一個位置的字元,所以當輸入的第一個字是a, 則會發生error的情形
Lamba運算式
1.因為 Lambda 運算式具有類型,您可以將其指派至auto
變數或函式物件
2.宣告 Lambda 運算式時將該運算式與其所擷取的變數繫結在一起,而不是在呼叫該運算式時執行
int main()
{
using namespace std;
int i = 3;
int j = 5;
// The following lambda expression captures i by value and
// j by reference.
function<int (void)> f = [i, &j] { return i + j; };
// Change the values of i and j.
i = 22;
j = 44;
// Call f and print its result.
cout << f() << endl;
}
- 位元AND運算子:&
會比較第一個運算元的每個位元,以及第二個運算元的對應位元。 如果兩個位元皆為 1,則對應的結果位元會設為 1。 否則,對應結果位元會設為 0。位元 AND 運算子的兩個運算元都必須為整數類型。
位元遮罩:奇數的數值若以二進位來表示,其最右邊的位元必為1,而偶數最右邊的位元必為0,所以您使用1來與輸入的值作AND運算,由於 1除了最右邊的位元為1之外,其它位元都會是0,與輸入數值AND運算的結果,只會留下最右邊位元為0或為的結果,其它部份都被0 AND運算遮掉了,這就是所謂「位元遮罩」。