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
ループがコンパイルべきではありません。