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