C++學習筆記:複合型別
阿新 • • 發佈:2019-01-29
Keep going~
1.string類
- 包含標頭檔案string.h,並提供using編譯指令
using namespace std
- 可以用陣列表示法來訪問儲存在string物件中的字元。
- 程式能夠自動處理string的大小。
- string物件可以相互賦值
str1 = str2;
- 可以使用+將兩個string物件合併起來:
str3 = str1 + str2; //將合併的string賦給str3
str2 += str1; //將str1附近到str2的末尾
strcpy(charr1, charr2); //字元陣列複製
strcat(charr1, charr2); //字元數組合並(結果併入charr1)
將第一行輸入讀取到string物件:
getline(cin, str);
- R原始字串語義:不對轉義字元作處理,也可以使用
"
而非\"
R"(Jim "king" uses "\n" instead of endl.)"
上述程式碼將顯示為:
Jim "king" uses "\n" instead of endl.
用R"+*(...)*+"
可包含"(
和)"
2.結構體:struct
- 外部宣告
內部宣告
(c++不提倡使用外部變數,但提倡使用外部結構宣告) - 可以將結構作為引數傳遞給函式,函式也可以返回結構。
- 可以使用賦值運算子
=
將結構賦給另一個同類型結構。 - 可同時完成定義結構和建立結構變數的工作。
- 結構陣列
inflatable guest[2]=
{
{"Bambi", 0.5, 21.99},
{"Robb", 200, 565.99}
};
- 結構中的位欄位。
指定佔用特定位數的結構成員。
欄位的型別為整型或列舉,接:
再跟一個數字,其指定了使用的位數。
3.共用體:union
- 一種資料格式,能夠儲存不同的資料型別。但只能儲存
int
,long
或double
. - 句法與結構相似
- 用途:當資料項使用兩種或更多種格式(但不會同時使用)時,可節省空間。
struct widget
{
char brand[20 ];
union id
{
long id_num;
char id_char[20];
}id_val;
};
4.列舉:enum
- 列舉量為整型,可被提升為
int
型別
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
其中spectrum
為新型別,red
,orange
等作為符號常量,對應整數值0~7。
- 設定列舉量的值
enum bigstep { first, second = 100, third};
這裡first
的值為預設值0,third
的值為101。
5.指標與自由儲存空間
- 自動儲存
區域性變數,作用域為包含它的程式碼塊(自動變數,通常儲存在棧中) - 靜態儲存(靜態變數)
- 在函式外部定義
- 宣告變數時使用關鍵字
static
- 動態儲存
new
和delete
管理了一個記憶體池(自由儲存空間或堆)
能夠在一個函式中分配記憶體,而在另一個函式中釋放它。
6.型別組合
間接成員運算子。
...
s.year = 1999;
stru_year *pa = &s;
pa->year = 1999; //通過間接成員運算子訪問成員,pa為指標。
7.陣列的替代品
- 模板類:vector
類似於string類,也是一種動態陣列。
是使用new
建立的動態陣列的替代品。
#include <vector>
...
using namespace std;
vector<int> vi; //整型空陣列
int n;
cin >> n;
vector<double> vd(n); //浮點型長度為n的陣列
- 模板類:array(C++11)
與陣列一樣,長度固定,效率相同。允許物件賦值(陣列只能逐個複製)
#include <vector>
...
using namespace std;
array<int,5> ai; //整型長度為5的陣列
array<double,4> ad={1.2, 2.1, 3.43, 4.3}; //浮點型長度為4的陣列