lines->begin()
и lines->end()
ведут себя не так, как вы ожидали. lines
затухает до string*
, затем lines->begin()
вернет итератор 1-го std::string
массива lines
, а разыменование на итераторе получит char
.
Вместо этого можно использовать std::begin
и std::end
.
std::copy_if(std::begin(lines), std::end(lines), std::back_inserter(v),
[len](std::string i) { return len == i.length(); });
Кстати: vector<string> v (8);
инициализирует v
с 8 элементами (пусто std::string
с); потому что вы используете back_inserter
позже, я думаю, достаточно просто vector<string> v;
. В противном случае вы получите 8+ элементов в v
, наконец.
Другие проблемы: Объявление типа возвращаемого значения функции кажется потерянным; Тип лямбда-параметра может быть изменен на const std::string&
.