C++基礎知識復習
- 一、數據類型
- 二、修飾符和運算符
- 三、Lambda函數和表達式
- 四、數學函數
- 五、字符串
- 六、結構體
一、數據類型
1.1基本類型
基本類型 | 描述 | 字節(位數) | 范圍 |
---|---|---|---|
char | 字符類型,存儲ASCLL字符 | 1(8位) | -128 到 127 或 0 到 255(依賴編輯器) |
signed char | 有符號字符 | 1(8位) | -128 到 127 |
unsigned char | 無符號字符 | 1(8位) | 0到255 |
int | 整型 | 4(32位) | -2,147,483,648 到 2,147,483,647 |
unsigned int | 無符號整型 | 4(32位) | 0 到 4,294,967,295 |
float | 單精度浮點數 | 4(32位) | 約 ±3.4e±38(6-7 位有效數字) |
double | 雙精度浮點數 | 8(64位) | 約 ±1.7e±308(15 位有效數字) |
筆記:復習基本數據類型的取值范圍和計算方法
【跳轉復習總結】
1.2C++新增類型
C++11新增類型 | 描述 | 示例 |
---|---|---|
auto | 讓編輯器自動推斷類型
| auto x=10; |
decltype | 獲取表達式的類型
| decltype(x) y=20; |
initializer_list | 初始化列表類型
| initializer_list list = {1, 2, 3}; |
tuple | 元組類型,存儲多個不同類型的值 | tuple |
筆記:復習迭代器和Lambda表達式
【跳轉復習總結】
1.3派生類型
派生類型 | 描述 | 示例 |
---|---|---|
數組 | 相同類型元素的集合 | int arr[5]={1,2,3}; |
指針 | 存儲變量內存地址的類型 | int* p=&x; |
引用 | ref和x指向同一塊地址 | int & ref=x; |
函數 | 函數類型,表示函數名 | int func(int a,int b); |
結構體 | 用戶自定義數據類型,可包含不同的類型成員 | struct Piont{int x;int y;); |
類 | 用戶定義的數據類型,支持封裝、繼承和多態 | class MyClass{}; |
聯合體 | 多個成員共享同一塊內存 | union Data{int x;float f;}; |
枚舉 | 用戶定義的整數常量集合 | enum Color{RED,GREEN;}; |
筆記:復習函數指針、結構體賦值和類
【跳轉復習總結】
1.4別名
別名 | 描述 | 示例 |
---|---|---|
#define | 文本替換(預處理器處理),不進行類型檢查 | #define Myint int |
typedef | 類型別名(編輯器處理) | typedef int Myint; |
using | 類型別名(編輯器處理) | using Myint=int; |
1.5標準庫類型
標準庫類型 | 描述 | 示例 |
---|---|---|
string | 字符串類型 | string s="hello"; |
vector | 動態數組 | vector< int >v={1,2,3}; |
pair | 存儲兩個值的容器 | pair< int,float>p(1,2.0); |
map | 鍵值對容器 | map< int,string>m; |
set | 唯一值集合 | set< int>s={1,2,3}; |
筆記:復習map和set的區別,理解紅黑樹的原理
【跳轉復習總結】
1.6枚舉類型
enum 枚舉名{
標識符[=整型常數],
標識符[=整型常數],
……
標識符[=整型常數],
}枚舉變量;
例如enum color{red,green,blue}c;
c=blue;
默認情況下,第一個名稱為0,第二個為1,以此類推。還可以賦值enum color{red,green=5,blue};
1.7類型轉換
常量轉換 | 用于將const類型的對象轉換為非const類型的對象。 const int i=10; int &r=const_cast< int&>(i); |
---|---|
重新解釋轉換 | 將一個數據類型的二進制內存表示按另一個數據類型解釋,屬于強制按位轉化 int i=10; float f=reinterpret_cast< float&>(i);//f=1.4013e-44 |
靜態轉換 | 將一種數據類型的值強制轉換為另一種數據類型的值,通常用于類型相似的對象之間的轉換,如int轉換為float int i=10; float f=static_cast< float>(i); |
動態轉換 | 用于在繼承層次結構中進行向下轉換(downcasting)的一種機制,通常用于將一個基類指針或引用轉換為派生類指針或引用 |
二、修飾符和運算符
2.1修飾符
const | const定義常量,表示該變量的值不能被修改 |
static | static定義靜態變量,表示該變量的作用域僅限于當前文件或當前函數內,不會被其他文件函數訪問 |
2.2運算符
.(點)和->(箭頭) | 成員運算符用于引用類、結構和共同體的成員 |
& | 指針運算符&返回變量的地址,例如&a給出變量的實際地址 |
* | 指針運算符*表示解引用。指針var的值是內存地址,*var訪問該內存地址的存放內容 |
注:
- 成員運算符.使用對象是對象實例,如p.name。成員運算符->使用對象是指針指向的對象(相當于先解引用再使用.),即p->name≡(*p).name
- int *x=&y;int z=*x;其中&y表示獲取y的內存地址,指針x的值是y的內存地址;*x表示獲取x指向的內存地址的存放內容,z的值是x指向的內存地址的存放內容
三、Lambda函數和表達式
一般形式:[capture] (parameters)->return-type{body} | [] (int x,int y)->int{int z=x+y;return z+x;} |
特殊情況:[capture] (parameters){body}。“沒有返回值”或者“Lambda僅包含一個return語句” | []{global_x++;} [] (int x,int y){return x |
在Lambda表達式內可以訪問當前作用域的變量,可以通過前面的[]指定
[] | 沒有定義任何變量。使用未定義變量會引發錯誤 |
[x,&y] | x以傳值方式傳入(默認),y以引用方式傳入 |
[&] | 任何被使用到的外部變量都隱式地以引用方式加以引用 |
[=] | 任何被使用到的外部變量都隱式地以傳值方式加以引用 |
[&,x] | x顯示地以傳值方式加以引用,其余變量以引用方式加以引用 |
[=,&z] | z顯示地以引用方式加以引用, |
四、數學函數
double sqrt(double); | sqrt(x)返回√x |
double pow(double,double); | pow(x,y)返回xy |
double floor(double); | 向下取整(小于或等于參數的最大整數) |
double ceil(double); | 向上取整(大于或等于參數的最小函數) |
int rand(); | 隨機數函數,通常與srand()time()函數搭配 srand((unsigned)time(NULL));//void srand(unsigned int seed); int r=rand(); |
五、字符串
5.1C字符串
strcpy(s1,s2); | 復制字符串s2到字符串s1 |
strcat(s1,s2); | 連接字符串s2到字符串s1的末尾 |
strlen(s1); | 返回字符串s1的長度 |
strcmp(s1,s2); | if(s1==s2)return 0; else if(s1 < s2)return -1; else return 1; |
strchr(s1,ch); | 返回一個指針,指向字符串s1中字符ch第一次出現的位置 |
strstr(s1,s2); | 返回一個指針,指向字符串s1中字符串s2第一次出現的位置 |
5.2C++的string類
str1=str2; | 復制字符串s2到字符串s1 |
str3=str1+str2; | 連接字符串s2到字符串s1的末尾 |
str1.size(); | 返回字符串s1的長度 |
六、結構體
6.1定義處命名
struct type_name{
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
}object_names;
注釋:type_name是結構體類型名,object_names是結構體變量名。結構體成員訪問運算符(.),如a.name
6.2typedef關鍵字
typedef struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
}Books;
為Book{…}結構體取別名Books,可以用Books來定義Book類型的變量而不需要struct關鍵字,如Books book1;
復習總結
- 復習基本數據類型的取值范圍和計算方法(計算機組成原理)
- 復習迭代器和Lambda表達式(leetcode)
- 復習函數指針、結構體和類
- 復習map和set的區別,理解紅黑樹的原理
后記:關于C++的高級教程和重點知識點代碼以后可能會繼續出,目前只總結基礎知識點,前面內容總結自【菜鳥教程】,筆記只摘錄了本人的疑難雜癥,若有更多問題可以訪問該網站,同時歡迎大家指正和批判文章中的內容,如果有格式上的優化建議也歡迎評論