數組
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;
結果:
感謝自己努力拼搏!!!