如何在std :: array <>上使用std :: for_each并在每个元素上应用lambda函数?

时间:2018-12-03 15:20:05

标签: c++ arrays c++11

我想将这三个功能结合在一起:

  • std :: for_each
  • std :: array
  • lambda函数

举一个使用C ++ 11的示例。

std::for_each(arr, arr + sizeof(arr) / sizeof(int), [&](int x) { std::cout<<x<<" ";});

如何转换该代码以在std::array上运行?

2 个答案:

答案 0 :(得分:4)

您想要数组array::beginarray::end,用于for_each()的前两个参数,这些参数将标记数组的开始和结束。

然后,第三个参数是一个函数,在您的情况下为lambda函数,如下所示:

std::for_each(myarray.begin(), myarray.end(), [](int x) { std::cout << x <<" "; });

PS:对于更通用的方法,您可以使用std::begin()std::end(),这样,如果容器发生更改(例如,从std::array更改为std::vector),您可以可以保持此代码不变。

答案 1 :(得分:0)

答案在互联网上非常流行。我从std::array in action

抢来了

给出:

O(NlogN)

甚至:

std::array<int, 8> arr{1, 2, 3, 4, 5, 6, 7, 8};

使用int arr[] = {1, 2, 3, 4, 5, 6, 7, 8}; for_each

lambda

甚至:

std::for_each(std::begin(arr), std::end(arr), [](int v){std::cout << v << " ";});

已更新

使用// calculate the sum of the array by using a global variable int sum = 0; std::for_each(std::begin(arr), std::end(arr), [&sum](int v) { sum += v; }); std::cout << "sum of array{1,2,3,4,5,6,7,8}: " << sum << std::endl; std::begin()代替@NathanOliver建议的std::end().begin()