我是靠谱客的博主 踏实枫叶,最近开发中收集的这篇文章主要介绍mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

普通的for循环

for_each函数模板

基于范围的for循环

普通用的像:

for(int i = 0; i 

这种的for循环就不说了, 下面主要说一下后两个,做个笔记。

以后用for循环可以考虑下使用后两种方法!

9f99d13dde5a359d8186ce6b33417bd3.png

对于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 <

}

运行结果:

3aeb42babff8c0267f6ec56f45958ff6.png

还有再回忆下matlab中的arrayfun函数,可以看一下这篇推文:避免无用的循环——fun系列的另外三个函数

B = arrayfun(func,A)

感觉MATLAB中的这个函数也有点像这个for_each。arrayfun是直接把A中的所有元素都给func函数,而不要设一个区间。

9f99d13dde5a359d8186ce6b33417bd3.png

对于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 <

}

结果:

40e74987c4082aed4e9cdf36e44a1b13.png

8c2f64e3b834149cd0ea15427d23ddf7.png

bfb224d4f9be199a52b3dfb70511e147.png

最后

以上就是踏实枫叶为你收集整理的mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环的全部内容,希望文章能够帮你解决mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部