简单的讲一下for循环的三种用法!
用的编译工具是:Visual Studio 2017
一、for (int i = 0; i < N; i++)
这是最简单,也是最常用的方法:
int nums[] = { 3, 4, 2, 9, 15, 267 };
const int N = 6;
for (int i = 0; i < N; i++) {
cout << nums[i] << " ";
}
cout << endl << endl;
这种方式没什么好讲,重点看下面两种!
二、for_each
需包含头文件:#include < algorithm >
1. for_each(nums, nums + N, vecFunc);
这种方式需要借助一个函数,遍历将数组中的每个值在函数中进行操作。
其中nums是一个数组,N是数组的个数,vecFunc是一个函数
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
using namespace std;
// 函数
void vecFunc(int &i) {
cout << i << endl;
i = 10; // 更改数组的值
}
int main() {
int nums[] = { 3, 4, 2, 9, 15, 267 };
const int N = 6;
cout << "for_each - 数组:" << endl;
for_each(nums, nums + N, vecFunc); // 注意:N的值不能大于数组的长度,否则会越界
// 数组更改后的数组的值
for (int i = 0; i < N; i++) {
cout << nums[i] << " ";
}
cout << endl << endl;
return 0;
}
运行截图:
函数中,设置的参数是传引用,所以我们在对数组的值操作时,也可以更改它的值。
2. for_each (vec.begin(), vec.end(), vecFunc);
当然,for_each也可以适用于容器,使用迭代器的方式遍历,并更改其中的值,当然也需要借助函数,更上面类似。
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
using namespace std;
void vecFunc(int &i) {
cout << i << endl;
i = 10;
}
int main() {
vector<int> vec; // vector容器
vec.push_back(1); // 插入值
vec.push_back(2);
cout << "for_each - vector:" << endl;
for_each (vec.begin(), vec.end(), vecFunc);
// vec.begin():指容器的第一个值;vec.end():指容器的最后一个值的下一个值
for (int i = 0; i < vec.size(); i++) {
cout << vec.at(i) << " ";
}
return 0;
}
运行截图:
三、 for (类型 变量 : 数组或容器)
1. for (int var : nums)
其中nums是一个数组
这种方式可以用来遍历数组!
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
using namespace std;
int main() {
int nums[] = { 3, 4, 2, 9, 15, 267 };
const int N = 6;
cout << "for - 数组:" << endl;
//for (int &var : nums) { // 这里可以使用引用"&"来修改数组中的值
for (int var : nums) {
cout << var << endl;
}
return 0;
}
运行截图:
2. for (int var : vec)
其中vec是一个int类型的容器
这种方式可以用来遍历容器,但是不能改变容器中的值。
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
using namespace std;
int main() {
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
cout << "for - vector:" << endl;
//for (int &var : vec) { // 这里可以使用引用"&"来修改容器中的值
for (int var : vec) {
cout << var << endl;
}
cout << endl;
return 0;
}
运行截图:
四、全部代码
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
using namespace std;
void vecFunc(int &i) {
cout << i << endl;
i = 10;
}
int main() {
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
cout << "for_each - vector:" << endl;
for_each (vec.begin(), vec.end(), vecFunc);
for (int i = 0; i < vec.size(); i++) {
cout << vec.at(i) << " ";
}
int nums[] = { 3, 4, 2, 9, 15, 267 };
const int N = 6;
cout << "for_each - 数组:" << endl;
for_each(nums, nums + N, vecFunc);
for (int i = 0; i < N; i++) {
cout << nums[i] << " ";
}
cout << endl << endl;
cout << "for - vector:" << endl;
for (int &var : vec) {
cout << var << endl;
}
cout << endl;
cout << "for - 数组:" << endl;
for (int &var : nums) {
cout << var << endl;
}
return 0;
}
五、总结
好了,for几种用法已经讲完了,个人感觉如果只是遍历的话,第三种会比较简便。