2015-10-09 4 views
0
#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; 
} 

Ошибка:Почему это неправильно в использовании for_each?

C2782: '_Fn1 станд :: for_each (_init, _init, _Fn1)': шаблон параметра '_init' неоднозначен

кто может сказать, как с помощью for_each правильно?

+1

Пожалуйста, укажите в своем вопросе точную ошибку, а не снимок экрана. – Pumkko

+1

Убедитесь, что вы используете C++ 11. lambda-функции поддерживаются в предыдущих версиях. если вы используете g ++, вам нужно использовать '-std = C++ 11' в командной строке. –

+0

Я нашел, что это сработало, если я заменил 'vec_int.crbegin()' на 'vec_int.rbegin()' – YourFather

ответ

6

Вы смесительный const и нефизических const итераторы. Это разные типы, поэтому вычитание аргумента шаблона не выполняется. Используйте один из них для обоих аргументов:

std::for_each(vec_int.crbegin(), vec_int.crend(), [](const int & i) { cout << i;}); 
             ^
4

for_each требуется одинаковый тип итераторов, вы предоставляете const_reverse_iterator и reverse_iterator.

crend Использование в качестве второго параметра исправляет проблему:

std::for_each(vec_int.crbegin(), vec_int.crend(), [](const int & i) { cout << i;});