c++中的那些foreach循环

1. c++中的 for_each 函数

for_each()事实上是個 function template,其源码如下
link:http://www.cplusplus.com/reference/algorithm/for_each/?kw=for_each

template
Function for_each(InputIterator beg, InputIterator end, Function f) {
  while(beg != end) 
    f(*beg++);
}
能看懂吧!!!

例如:

// for_each example
#include      // std::cout
#include     // std::for_each
#include        // std::vector

void myfunction (int i) {  // function:
  std::cout << ' ' << i;
}

struct myclass {           // function object type:
  void operator() (int i) {std::cout << ' ' << i;}
} myobject;

int main () {
  std::vector myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);

  std::cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), myfunction);
  std::cout << '\n';

  // or:
  std::cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), myobject);
  std::cout << '\n';

  return 0;
}

结果:
myvector contains: 10 20 30
myvector contains: 10 20 30

foreach其他用法:https://www.cnblogs.com/zhangkele/p/9373063.html

2. C++11之for循环的新用法

C++使用如下方法遍历一个容器:

遍历vector容器
#include
#include

int main()
{
    std::vector arr;
    arr.push_back(1);
    arr.push_back(2);

    for (auto it = arr.begin(); it != arr.end(); it++)
    {
        std::cout << *it << std::endl;
    }

    return 0;
}

其中auto用到了C++11的类型推导。同时我们也可以使用std::for_each完成同样的功能:

#include
#include
#include

void func(int n)
{
    std::cout << n << std::endl;
}

int main()
{
    std::vector arr;
    arr.push_back(1);
    arr.push_back(2);

    std::for_each(arr.begin(), arr.end(), func);

    return 0;
}

现在C++11的for循环有了一种新的用法:

#include
#include

int main()
{
    std::vector arr;
    arr.push_back(1);
    arr.push_back(2);

    for (auto n : arr)
    {
        std::cout << n << std::endl;
    }

    return 0;
}

上述方式是只读,如果需要修改arr里边的值,可以使用for(auto& n:arr),for循环的这种使用方式的内在实现实际上还是借助迭代器的,所以如果在循环的过程中对arr进行了增加和删除操作,那么程序将对出现意想不到的错误。

遍历map映射容器 三种方式

map m;
 // 1
for (    auto &v : m)  
     {
         cout<::reference a){
         cout<::reference a)  //不要少了reference,不然会报错。
{
         cout<

还有一种宏定义的方法实现foreach循环:

//定义
#define foreach(container,it) \
    for(typeof((container).begin()) it = (container).begin();it!=(container).end();++it)
//输出
foreach(m,it)
    {
        cout<first<<","<second<

for_each 函数:
http://www.cplusplus.com/reference/algorithm/for_each/?kw=for_each
https://www.cnblogs.com/zhangkele/p/9373063.html
https://www.cnblogs.com/nzbbody/p/3409189.html
c++11 for 循环新特性:
https://www.cnblogs.com/jiayayao/p/6138974.html
https://www.cnblogs.com/DSYR/p/9151975.html
宏定义实现foreach 循环:
https://blog.csdn.net/imxiangzi/article/details/49952763
https://www.cnblogs.com/DSYR/p/9151975.html

hint:这里所指的foreach 循环是指如下形式:

for (type x : arr) {
	// x依次遍历arr中的每一个数
}

补充

在DevC++使用C++11版本:
https://blog.csdn.net/qiqi123i/article/details/53150837
https://blog.csdn.net/qq_17715159/article/details/77371191

C++ 版本:
https://blog.csdn.net/ftell/article/details/79312007

C++11版本新特性:
https://www.cnblogs.com/special23/p/5083450.html

你可能感兴趣的:(c/c++知识点,c/c++,语法,foreach循环,devc++设置c++版本)