C++基礎學習(三)陣列
阿新 • • 發佈:2019-01-04
關於陣列的語法點還是很多的,基本陣列,字元型陣列,指標陣列,還有C++標準庫中的關於陣列的容器,今天只簡單總結下,關於C++中陣列的宣告和使用的一些細節。
1、一維陣列
#include<iostream> using namespace std; void main() { int myArray1[4] = { 1, 2, 3, 4 }; //常用的方式 int myArray2[4] = {}; //可以不設定初值,就預設陣列中全為0 int myArray3[] {1, 2, 3, 4}; //在[]中可不寫陣列長度,但必須給該陣列初值,C++會根據你給的陣列初值分配相應的空間 //在這裡myArray3的陣列長度就是4,索引為0~3 double myArray4[12]{1.1, 2.23, 3.4}; //也可以不寫等號 cout << myArray1[0] << endl; //陣列的索引從0開始 cout << myArray2[1] << endl; cout << myArray4[10] << endl; //沒被賦值的部分也都為0 myArray1[0] = 99; //可通過索引改變陣列中對應的值 cout << myArray1[0] << endl; //輸出值為99 //以下都是錯誤操作 cout << myArray1[10] << endl; //error 當我們訪問的索引超出了該陣列的邊界時,C++也不會報錯,但這樣做是錯誤的 myArray1 = myArray2; //直接將一個數組變數的賦值給另一個數組變數時錯誤的 }
2、多維陣列
#include<iostream> using namespace std; void main() { //初始化多維陣列,這是一個3行4列的多維陣列,格式我這樣寫只是為了美觀 int myArrys1[3][4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; for (int i = 0; i < 3; i++) //迴圈3次,即3行 { for (int j = 0; j < 4; j++) //迴圈4次,即4列 { cout << myArrys1[i][j] << " "; //可以想象成有個3行4列的表格,我們從左向右,從上到下輸出每個格子中的值 } cout << endl; //每輸出完一行換行 } }
3、字元型陣列
#include<iostream> #include<string> //為了可以操作string而引入的C++的string類 using namespace std; void main() { //以這種方式寫的字元型陣列一定要加'\0',表示字元結束,當然不寫的話你也可以看看輸出了什麼 char name[] {'M', 'r', ' ', 'S', 'u', 'X', 'i', '\0'}; //字元型陣列可直接輸出陣列中的所有內容, cout << name << endl; int a[4]{1, 2, 3, 4}; //如果是數值型陣列,不寫索引直接輸出會輸出一串十六進位制,這是該陣列在記憶體中的地址 cout << a << endl; //這種方式更加簡便且不用加'\0' char chArray[]{"My name is SuXi"}; cout << chArray << endl; //這裡說下C++的標準庫中有專門針對字串而寫的容器string,有很多操作方法,大家可以自行去檢視和學習 string myStr = "This is the best"; cout << myStr; }
關於cin輸入流輸入字串的一些問題:
#include<iostream>
using namespace std;
void main()
{
//char chArray1[20]{};
//cin >> chArray1; //這裡我輸入Mr SuXi
//cout << chArray1 << endl; //最終只輸出了Mr,因為提取運算子>>預設輸出終止符為空格、製表符Tab和回車,
//在我敲擊空格時cin就不在接收輸入了
char chArray2[20]{};
//這裡我們用getline()函式,第二個引數為限定的輸入長度
cin.getline(chArray2, 20);
cout << chArray2 << endl; //可以得出完整的一行字串
//此時只有輸入*時再按回車才會結束輸入,因此可一下子輸出多行字串
cin.getline(chArray2, 20, '*');
cout << chArray2 << endl; //可以得出完整的一行字串
}
4、陣列的替代品
原生態的陣列很不方便,定義的時候就要設定好設定數值長度,之後就無妨修改這個陣列的容量,同時訪問陣列中的數值只能用索引的方式,完全不靈活,然而C++的標準模板庫中有陣列的替代品也就是關於陣列的容器類,更容易操作,安全性高,靈活性也更大,這裡只簡要介紹下。
#include<iostream>
#include<array> //引入C++標準模板庫中的array類,才可以操作array容器
using namespace std;
void main()
{
//使用array容器時,<>中傳遞資料型別和陣列長度
array<int, 10> myArray = { 1, 2 };
//可直接輸出陣列的長度
cout << myArray.size() << endl;
//fill()函式可以將陣列中的所有值變為你傳遞進去的值
myArray.fill(29);
for (int i = 0; i < myArray.size(); i++)
{
cout << myArray[i] << " ";
}
}
array為固定長的容器,即在定義時必須要設定長度,雖然感覺和原始的陣列沒什麼太大卻別,但可以提高安全性,這個在初學階段感覺不到,還有array提供很多方便的運算元組的方法,大家可以去去試試。
下面的vector容器就靈活多了,它是長度可變的,光是這一項能力就讓它可以解決我們很多程式設計問題。
#include<iostream>
#include<vector> //引入C++標準模板庫中的vector類,才可以操作vector容器
using namespace std;
void main()
{
//定義時只需傳遞資料型別
vector<int> list;
//通過該函式向我們的陣列中插入資料,這是list的長度和容量都會增加
list.push_back(123);
cout << "陣列長度為:" << list.size() << " 容量為: " << list.capacity() << endl;
list.push_back(999);
//可以看到長度和容量都增長了
cout << "陣列長度為:" << list.size() << " 容量為: " << list.capacity() << endl;
cout << list[0] << " " << list[1] << endl;
}
關於C++陣列方面的內容很多,C++標準模板類中的相應容器類也不少,我們只需要在合適的時候使用合適的容器和方法就行了。