C Primer之4 6列舉讀書筆記

2021-08-31 01:17:05 字數 1658 閱讀 6608

c++的enum工具提供了另一種建立符號常量的方式,這種方式可以代替const。它還允許定義新型別,但必須按照嚴格的限制進行。使用enum的句法與使用結構相似。例:

enum spectrum;

#這條語句完成了兩項工作

#1.讓spectrum成為新型別的名稱;spectrum被稱為列舉(enumeration),就像struct被稱為結構體一樣。

#2.將red、orange、yellow等作為符號常量,它們對應的數值0~7.這些常量叫做列舉量。

在預設情況下,將整數值賦給列舉量,第乙個列舉量的值是0,第二個是1,依此類推,可以通過顯式地指定整數值來覆蓋預設值。

可以用列舉名來宣告這種型別的變數:

spectrum band; // band a variable of type spectrum
在不進行強制型別轉換的情況下,只能將定義列舉時使用的列舉量賦給這種列舉的變數。例:

band=blue; // vaild,blue is an enumerator

band=2000;//invaile,2000 not an enumerator

對於列舉,只定義了賦值運算子,沒有為列舉定義算術運算:

band=orange;   // valid

++band; // not vaild

band=orange+red; //not vaild,but a little tricky

列舉量是整型,可被提公升為int型別,但int型別不能自動轉換為列舉型別:

int color =blue; // vaild,spectrum type promoted to int

band=3; //invaild,int not convered to spectrum

color =3+red; //vaild,red converted to int

設定列舉量的值

可以使用賦值運算子來顯式地設定列舉量的值:

enum bits;

#指定的值必須是整數。也可以只顯式地定義其中一些列舉量的值:

enum bigstep; //first在預設情況下為0,後面沒有被初始化的列舉量的值將比前面的列舉量大1.因此third的值為(上取整0)

##可以建立多個值相同的列舉量:

enum; //其中zero和null都為0,one和numero_uno都為1.

2.列舉的取值範圍

每個列舉都有取值範圍,通過強制型別轉換,可以將取值範圍中的任何整數值賦給列舉量,即使這個值不是列舉值。

#設bits和myflag的定義如下:

enum bits;

bits myflag;

myflag =bits(6) //vaild,because 6 is in bits range 其中6不是列舉值,但它位於列舉定義的取值範圍內。

取值範圍的定義:

首先,要找出上限,需要知道列舉量的最大值。找到大於這個最大值的、最小的2的冪,將它減去1,得到的便是取值範圍的上限。要計算下限,需要知道列舉量的最小值。如果它不小於0,則取值範圍的下限為0;否則,採用與尋找上限方式相同,但加上負號。

7 2列舉排列

7.2.1生成1 n 的排列 問題描述 輸入整數n,按照字典序從小到大列印出1 n的去所有排列。兩個序列的字典序大小關係等價於從頭開始第乙個不相同處的大小關係,例如 1,2,3 3,2,1 n 3時,輸出結果是 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 演算法思想 設集...

9 4 列舉型別

乙個變數只有幾種可能的取值,可以一一枚舉出來,變數的取值僅限於列舉的值的有限範圍內,而不適宜用整型 實型 字元型直接表示,c語言提供了這種列舉資料型別。例如,一年的四季有春夏秋冬 乙個星期有星期日 星期一到星期六等。定義列舉型別的一般形式為 enum 列舉型別名 如 enum weekday 1.列...

146 列舉型別

除了簡單的變數型別之外,c 還提供了3個複雜的變數 列舉,結構和陣列。列舉型別的定義 enum 列舉型別的宣告 列舉型別的賦值 在遊戲中我們可以定義乙個int型別來儲存狀態 0 遊戲暫停 1遊戲失敗 2遊戲勝利 3開始選單,但是這樣不容易閱讀,而且容易出錯。這個時候我們通過列舉型別來解決 enum ...