c++ 之數組篇學習

數組

c++11之循環遍歷優化

格式:

for(變量類型 變量名:數組名)

  • 這裏的變量類型可填成員類型也可用auto類型
  • 若類型不一致且可轉換,默認進行強轉

例子:

int Students[5]{}; //學號
int num = sizeof(Students) / sizeof(int);
for (int i = 0; i < num; ++i)
{
	cout << "請輸入第" << i + 1 << "個學生的學號:";
	cin >> Students[i];
}
//for (int i : Students)   //可以用這個
for (auto i : Students) //也可以用這個
{
	cout << i << endl;
}

重溫多維數組

二維數組遍歷:

	int students[3][3]
	{ 
		{1,2,3},
		{4,5,6},
		{7,8,9}
	};
	for (int i = 0; i < 3; i++)
	{
		for (auto j : students[i]) //用上c++11的新方法,挺好的
		{	
			cout << j << " ";
		}
		cout << endl;
	}

三維數組也是類似,這裏給出代碼:

	int students[2][2][2]
	{ 
		{
			{1,2},
			{3,4},
		},
		{
			{5,6},
			{7,8},
		}
	};
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			for (auto k : students[i][j])
			{
				cout << k << " ";
			}
			cout << endl;
		}
		cout << endl;
	}

結果:
在這裏插入圖片描述
數組使用注意:

  • 除非逼不得已要用數組,否則一律不用;因爲越界漏洞這個是個老生常談的問題,極可能程序產生不可預知的錯誤或者被攻擊!

  • 多維數組在操作系統內存大多數是按照低維度優先排序

array之重溫

常用操作

  • size()用於查詢容器大小
  • fill(const int)用於全部初始化
  • at(num) 用於安全訪問(越界會拋出異常)
  • 重載 [ ],類似於數組訪問,會越界
  • 重載 == 可用於兩個比較

以上是最基本用法!

示範代碼:

	std::array<int, 3> StusID{};
	std::array<int, 3> _StusID{25,25,25};
	cout << "size = " << StusID.size() << endl;
	StusID.fill(25);
	for (int i = 0; i < StusID.size(); i++)
	{
		//cout << "stu[" << i << "] = " << StusID[i] << endl;  //不安全
		cout << "stu[" << i << "] = " << StusID.at(i) << endl;
	}
	if (StusID == _StusID)cout << "相等" << endl;
	else  cout << "不相等" << endl;

結果:
在這裏插入圖片描述

vector之重溫

常用操作

1、初始化操作

有五種方式,以下可見:

std::vector<int> StuID1; //空容器
std::vector<int> StuID2{ 3,4,5 }; //有三個數
std::vector<int> StuID3(5); //有五個數,並全爲0
std::vector<int> StuID4(3,50); //3個數,全爲50

訪問結果顯示:
在這裏插入圖片描述

2、常用方法

  • push_back(value) 向容器插入一個數
  • assign(num,value) 重新初始化容器爲num個value值
  • clear() 清空容器
  • empty() 容器爲空返回1,否則返回0
  • at(num) 安全訪問容器內容(越界拋異常)

示例代碼:

	std::vector<int> StuID1; //定義空容器
	StuID1.push_back(5); //插入一個5
	StuID1.push_back(10); //插入一個10
	for (int i = 0; i < StuID1.size(); i++) //遍歷
	{
		cout << "Stu1 [" << i << "] = " << StuID1.at(i) << " ";
	}
	cout << endl;
	StuID1.assign(3, 8);  //重新初始化
	for (int i = 0; i < StuID1.size(); i++)
	{
		cout << "Stu1 [" << i << "] = " << StuID1.at(i) << " ";
	}
	cout << endl;
	StuID1.clear(); //清空
	if (StuID1.empty())cout << "空的" << endl;
	else cout << "不是空的" << endl;

結果:
在這裏插入圖片描述
感謝自己努力拼搏!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章