1. 程式人生 > >C++學習筆記:複合型別

C++學習筆記:複合型別

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

  • 一種資料格式,能夠儲存不同的資料型別。但只能儲存intlongdouble.
  • 句法與結構相似
  • 用途:當資料項使用兩種或更多種格式(但不會同時使用)時,可節省空間。
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為新型別,redorange等作為符號常量,對應整數值0~7。

  • 設定列舉量的值
enum bigstep { first, second = 100, third};

這裡first的值為預設值0,third的值為101。

5.指標與自由儲存空間

  • 自動儲存
    區域性變數,作用域為包含它的程式碼塊(自動變數,通常儲存在棧中)
  • 靜態儲存(靜態變數)
    1. 在函式外部定義
    2. 宣告變數時使用關鍵字static
  • 動態儲存
    newdelete管理了一個記憶體池(自由儲存空間或堆)
    能夠在一個函式中分配記憶體,而在另一個函式中釋放它。

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.22.13.434.3}; //浮點型長度為4的陣列