поведение std :: transform вместе с back_inserter не понимают - PullRequest
0 голосов
/ 24 июня 2019

У меня проблемы с пониманием поведения функции преобразования, если она используется с back_inserter.

#include <algorithm> 
using namespace std;

int main()
{
    vector<int> a{1,2,4};
    transform(begin(a), end(a), back_inserter(a), [](auto e){ cout << e << "-" ;
                                                             return e;});
    return 0;
}

В вышеприведенной программе я получаю вывод 1-0-4. Я не могу понять, как этот 0 идет? Пожалуйста, смотрите живой пример cpp.sh / 6vpzk

1 Ответ

0 голосов
/ 24 июня 2019

Этот код делает vector::push_back, перебирая его, используя свои итераторы. vector::push_back делает недействительными все существующие итераторы, вызывающие неопределенное поведение, и именно отсюда исходит 0 (это может быть любое другое число, поскольку поведение не определено).

Возможно, вам следует использовать for_each или диапазон для цикла.

...