2013-11-14 4 views
0

Это работает, for_each передает векторыfor_each (for_each())?

std::vector<int> v(10, 1); 
std::vector< std::vector<int> > vv(10, v); 
auto vvit = vv.begin(); 

std::for_each(vvit, vv.end(), f); 

функционировать п, которая применяется for_each заново работать с внутренними векторных Интс

void f(const std::vector<int>& v) {std::for_each(v.begin(), v.end(), def);} 

но for_each в пределах for_each

std::for_each(vvit, vv.end(), std::for_each((*vvit).begin(), (*vvit).end(), def)); 

и функции для всего ints

void def(const int& i) { std::cout << i; } 

нет. (И не с привязкой, если я попытался правильно.) Компилятор говорит, что функция def не может применить правильное преобразование, т. Е. От векторного распределителя (указателя позиции вектора?) К const int &, что бы то ни было в первом примере с функцией разделения вектора е.

Является ли это сложным или тривиальным?

+3

Что такое ваш вопрос? Вам интересно, почему это не работает? Зачем вам это ожидать? –

+0

Извините, да, почему for_each не принимает внутренний for_each как аргумент функции, внешний применяется к внешнему вектору, а внутренний - к [каждому] внутреннему вектору? Так что это тривиально, почему? –

+0

на отражение, это должно быть «почему функция def не применяется так, чтобы ее параметр соответствовал целям вектора»? –

ответ

2

простое решение передать for_each в лямбда:

std::for_each(vvit, vv.end(), [f](std::vector<int> const& v) 
    { std::for_each(v.begin(), v.end(), f); }); 

Но что случилось с

for (auto const& v : vv) { 
    for (int i : v) { 
    f(i); 
    } 
} 
+0

спасибо за лямбда-решение –

Смежные вопросы