std :: transform行为以及back_inserter无法理解

时间:2019-06-24 16:30:33

标签: c++ c++14

如果与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 :(得分:0)

此代码在使用其迭代器对其进行迭代时执行vector::push_backvector::push_back使所有导致未定义行为的迭代器无效,这就是0的来源(它可以是任何其他数字,因为行为是未定义的。)

您可能应该使用for_each或循环范围。