繁体   English   中英

为什么 `std::for_each_n` 不能编译?

[英]Why does `std::for_each_n` not compile?

#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v{ 1, 2, 3, 4 };

    std::for_each_n(v.begin(), 2, [](int n) { });
}

使用 gcc 9.2.1 ( -std=c++17 ),编译失败:

error: could not convert 'std::for_each<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, main()::<lambda(int)> >(__first, __first.__gnu_cxx::__normal_iterator<int*, std::vector<int> >::operator+(__n2), (__f, main()::<lambda(int)>()))' from 'main()::<lambda(int)>' to '__gnu_cxx::__normal_iterator<int*, std::vector<int> >'
3900 |  return std::for_each(__first, __first + __n2, __f);

看一眼for_each_n告诉我它调用

std::for_each(v.begin(), v.begin() + 2, ...)

但显然, for_each返回一个函数对象与for_each_n返回一个迭代器不兼容。

我如何使用for_each_n

这是库实现的问题。

for_each返回传入的函数对象的副本。

for_each_n返回一个迭代器,它指向经过迭代的范围末尾之后的第一个元素v.begin() + 2在本例中为v.begin() + 2 )。

这两种类型不兼容,并且让for_each_n返回for_each循环的结果不应该编译。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM