c++
- 第四章:C++基礎容器
- 4.1 序列容器--數組
- 概念:
- 數組聲明:
- 數組
- off-by-one error (差一錯誤之邊界)
- 數組元素的遍歷
- 數組的增刪改查
- 數組元素的添加和刪除
- 數組元素的訪問、修改![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200610230845754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njg1MjM3,size_16,color_FFFFFF,t_70)
- 數組元素的查找
- 二維數組![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200610232037408.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njg1MjM3,size_16,color_FFFFFF,t_70)
- 二維數組的訪問代碼
- 4.2 C++新型數組——vector簡介
- Vector是面向對象方式的動態數組
- Vector是面向對象方式的動態數組![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020061023281585.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njg1MjM3,size_16,color_FFFFFF,t_70)
- Vector尾部添加操作
- Vector的遍歷操作
- Vector的插入操作 ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200611000905548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2Njg1MjM3,size_16,color_FFFFFF,t_70)
- Vector的刪除操作
- 4.3 C++的字符串和字符數組
- 第七章 高級語法
第四章:C++基礎容器
4.1 序列容器–數組
概念:
代表內存裏一組連續的同類型存儲區
可以用來把多個存儲區合併成一個整體
比如:
int aar[10] = {1,2,3,4,5,6,7,8};
數組聲明:
- int arr[10];
- 類型名稱int便是數組裏所有元素的類型
- 名稱arr是數組名稱
- 整數10是數組裏包含的元素個數
- 數組裏元素個數不可以改變
數組
使用:
- 每個元素都有下標,通過下標可以直接訪問任意一個元素
- 下標從0開始到元素個數減一爲止
- 數組名稱和下標一起可以表示數組裏的元素 a[4]
優點:
- 可以編寫循環依次處理數組裏的所有元素
- 循環變量依次代表所有有效下標
for(int index = 0;index < len; ++index) { cout << ia[index] << " "; }
off-by-one error (差一錯誤之邊界)
再考慮一個簡單的問題:假定整數X滿足邊界條件 X >= 16 並且 X <= 37,那麼此範圍內X的可能取值個數有多少個?
我們進行思考時有兩個思考問題的原則:
1、首先考慮最簡單情況的特例、然後將結果外推;
2、仔細計算邊界;
X的上界與下界重合時,即 X >= 16 && X <= 16,顯然個數是1;
假定下界位low,上界位high;當low與high重合時。low = high時,個數爲1;
據此外推,high - low + 1個元素;所以這裏37 - 16 +1 = 22
這裏最容易出錯的地方就是 high - low + 1
是否存在一些編輯技巧來避免這樣的問題呢?
使用數學上的左閉右開區間表示,[ )
問題表示位: X >= 16 並且 X <=37 -> (X >= 16 && X <38),這樣38-16 = 22
數組元素的遍歷
C語言中設計數組下標的原則: 從0開始,使用非對稱區間;
1、讓這個區間是一個非對稱的區間[ ,) }
2、讓上界(左側)可以取到值,讓下界(右側)取不到值;
數組的增刪改查
數組元素的添加和刪除
數組元素的訪問、修改
數組元素的查找
二維數組
二維數組的訪問代碼
// 二維數組訪問
int arr[][4] = { {1,2,3,4},{5,6,7,8} };
for (int row = 0; row < 2; ++row)
{
for (int col = 0; col < 4; ++col)
{
cout << arr[row][col] << " ";
}
cout << endl;
}
4.2 C++新型數組——vector簡介
Vector是面向對象方式的動態數組
Vector是面向對象方式的動態數組
Vector尾部添加操作
Vector的遍歷操作
// vector動態數組
vector<int> vec = { 1,2,3,4 };
cout << "initlization: vec.capacity()" << vec.capacity() << endl;
cout << "initlization: vec.size()" << vec.size() << endl;
// 遍歷vector元素
for (unsigned int index = 0; index < vec.size(); ++index)
{
cout << vec[index] << " ";
}
cout << endl;
// 在尾部插入一個元素
vec.push_back(5);
cout << "now: vec.capacity()" << vec.capacity() << endl;
cout << "now: vec.size()" << vec.size() << endl;
// 遍歷vector元素
for (unsigned int index = 0; index < vec.size(); ++index)
{
cout << vec[index] << " ";
}
Vector的插入操作
Vector的刪除操作
4.3 C++的字符串和字符數組
字符串變量和常量
字符串變量
- 字符串是以空字符(’\0’)結束的字符數組
- 空字符 ‘\0’ 自動添加到字符串的內部表示中
- 在聲明字符串變量時,應該爲這個空結束符預留一個額外元素的空間 如:
char strHelloworld[11] = {“helloworld”};
字符串常量
- 字符串常量是一對雙引號闊氣倆的字符序列
- 字符串中每個字符作爲一個數組元素來存儲
例如字符串:“helloworld”
關於字符表示說明
0、’\0’ 與 ‘0’
在計算機內部的機器碼錶示:
char c1 = 0; -> 0x00
char c2 = '\0; -> 0x00
char c3 = ‘0’; -> 0x30
ASCII碼錶
ASCII是基於拉丁字母的一套編碼系統,主要用於顯示現代英語和其他西歐語言。
他是最通用的信息交換標準,並等同於國際標準ISO/IEC 646
ASCII使用指定的7位或8位二進制數組合來表示128或256中可能的字符。
編碼表可參考:https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin
Unicode編碼:
字符串的指針表示方法
字符串基本操作1
字符串長度strlen(s)
字符串比較 strcmp(const char* pStr1,const char* pStr2)
字符串拷貝 strcpy(char* pStr1,const char *pStr2)
字符串的基本操作2
複製指定長度字符串
字符串拼接
查找字符
查找字符串
字符串操作中的問題
4.4 C++中的新類型字符串-string
第七章 高級語法
從抽象到面向對象
面向對象
** C++使用struct、class來定義一個類
struct 的默認權限是public
class的默認權限是private
除此之外二者無差別
class Student
{
private:// 成員變量
string name;
double score;
public: //成員函數
double GetScore()
{
return score;
}
};
面向對象的第一大誤區
抽象一具體類型