概述
普通的for循环
for_each函数模板
基于范围的for循环
普通用的像:
for(int i = 0; i
这种的for循环就不说了, 下面主要说一下后两个,做个笔记。
以后用for循环可以考虑下使用后两种方法!
对于C++中的for_each:
首先它实际上是一个函数模板,包含在这个头文件中,它的原型如下:
template
Function for_each (InputIterator first, InputIterator last, Function fn);
for_each 的前两个参数是迭代器,用来定义容器的一个区间,第三个参数是一个函数对象,直接把你定义的一个函数的函数名放到第三个参数的位置上也行。(那个迭代器可以简单地理解为一个指针)
这个fn只能有一个参数,然后这个for_each就是把从 first 到 last 这个区间内的所有数据挨个带入到函数 fn 中进行处理计算,fn的形参类型需要和容器中数据的类型一致。如果要修改容器中该范围内的数据,需要把 fn 的形参写成某某类型的引用。
举例来说明
#include
#include
#include // using for_each
void modf1(int&);
void show(const int&);
int main(){
//1. 用for_each来 对一个容器进行修改
std::vector test1;
// 向test1容器中添加4个数
for (int i = 0; i
test1.push_back(i + 1);
std::cout <
//用for_each 修改 和 展示 test1容器中的内容
std::cout <
for_each(test1.begin(), test1.end(), show); //展示原始的数据
for_each(test1.begin(), test1.end(), modf1);//修改原始的数据
std::cout <
for_each(test1.begin(), test1.end(), show); //展示修改后的数据
std::cout <
std::cin.get();
std::cin.get();
return 0;
}
void modf1(int& r){
r++;
}
void show(const int& r){
std::cout <
}
运行结果:
还有再回忆下matlab中的arrayfun函数,可以看一下这篇推文:避免无用的循环——fun系列的另外三个函数
B = arrayfun(func,A)
感觉MATLAB中的这个函数也有点像这个for_each。arrayfun是直接把A中的所有元素都给func函数,而不要设一个区间。
对于C++中的 基于范围的for循环(C++11中才有),为用于STL设计的。它的用法如下:
for (type x : container)
{
....
}
type是变量x的类型,而且type必须和container容器中的元素类型一致!然后循环体就可以使用指定的变量 x 来依次访问容器container中的每个元素。还有就是这个container可以是容器,也可以是普通数组。
如果需要修改container中的元素,可以把这个 x 的类型变成type的引用,即type & 。
其实这个挺像Python中的for循环:
container = [1, 2, 3, 4]
for i in container:
....body....
下面举例说明
#include
#include
#include // using for_each
void modf1(int&);
void show(const int&);
int main(){
//用一个普通数组作为容器
int test[4] = { 1, 2, 3, 4, };
std::cout <
std::cout <
for (int& x : test)
show(x);
//在这个循环中来修改test容器的元素值
for (int& x : test)
modf1(x); //这个modf1的形参也必须是引用,不然没法修改test中的元素
std::cout <
for (int& x : test)
show(x);
std::cout <
//用vector作为容器
std::vector test1;
for (int i = 0; i
test1.push_back(i + 5);
std::cout <
std::cout <
for (int& x : test1)
show(x);
//在这个循环中来修改test1容器的元素值
for (int& x : test1)
modf1(x); //这个modf1的形参也必须是引用,不然没法修改test中的元素
std::cout <
for (int& x : test1)
show(x);
std::cin.get();
std::cin.get();
return 0;
}
void modf1(int& r){
r++;
}
void show(const int& r){
std::cout <
}
结果:
最后
以上就是踏实枫叶为你收集整理的mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环的全部内容,希望文章能够帮你解决mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复