YourFather
YourFather

Reputation: 13

why this is wrong about using for_each?

#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

Answers (2)

Baum mit Augen
Baum mit Augen

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

Jarod42
Jarod42

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

Related Questions