简单的讲一下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几种用法已经讲完了,个人感觉如果只是遍历的话,第三种会比较简便。