我想将这三个功能结合在一起:
举一个使用C ++ 11的示例。
std::for_each(arr, arr + sizeof(arr) / sizeof(int), [&](int x) { std::cout<<x<<" ";});
如何转换该代码以在std::array
上运行?
答案 0 :(得分:4)
您想要数组array::begin和array::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()
。