なぜ `のstd :: for_each_n`はコンパイルされませんか?

curiousguy12:
#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);

PEEK内部はfor_each_n、それが呼び出したことを私に伝えます

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

しかし、どうやら、for_each関数オブジェクトを返すことと互換性がありませんfor_each_nイテレータを返します。

私はどのように使うのですかfor_each_n

1201ProgramAlarm:

これは、ライブラリの実装に問題があります。

for_each に渡された関数オブジェクトのコピーを返します。

for_each_n(反復処理した範囲の端過去最初の要素を指すイテレータを返すv.begin() + 2この例では)。

これらの2つのタイプは互換性がない、とを有するfor_each_nリターン結果for_eachループがコンパイルべきではありません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=370123&siteId=1