1. 程式人生 > >C++基礎學習(三)陣列

C++基礎學習(三)陣列

關於陣列的語法點還是很多的,基本陣列,字元型陣列,指標陣列,還有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++標準模板類中的相應容器類也不少,我們只需要在合適的時候使用合適的容器和方法就行了。