Reputation: 13
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using std::vector;
using std::cout;
using std::ostream_iterator;
int main()
{
vector<int> vec_int{ 1,2,3 };
std::for_each(vec_int.crbegin(), vec_int.rend(), [](const int & i) { cout << i;});
return 0;
}
Error is:
C2782: '_Fn1 std::for_each(_InIt,_InIt,_Fn1)': template parameter '_InIt' is ambiguous
who can tell how to using for_each correctly?
Upvotes: 0
Views: 326
Reputation: 50053
You are mixing const
and non-const
iterators. Those are different types, thus template argument deduction fails. Use either one of them for both arguments:
std::for_each(vec_int.crbegin(), vec_int.crend(), [](const int & i) { cout << i;});
^
Upvotes: 6
Reputation: 217135
for_each
requires same iterators type, you provide a const_reverse_iterator
and reverse_iterator
.
Using crend
as second parameter fixes your issue:
std::for_each(vec_int.crbegin(), vec_int.crend(), [](const int & i) { cout << i;});
Upvotes: 4