C++ C++;无法取消引用结束列表迭代器

C++ C++;无法取消引用结束列表迭代器,c++,iterator,C++,Iterator,我使用transform和plus()合并两个列表,它抛出一个无法取消引用结束列表迭代器的错误。有人能帮忙吗?多谢各位 list<int> add(const list<int> & data1, const list<int> & data2) noexcept { list<int> output; if (data1.size() == data2.size()) { trans

我使用transform和plus()合并两个列表,它抛出一个无法取消引用结束列表迭代器的错误。有人能帮忙吗?多谢各位

    list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
    list<int> output;
    if (data1.size() == data2.size())
    {
        transform(data1.begin(), data1.end(), data2.begin(), output.begin(),plus<int>());
        return output;
    }
    return output; 
}
列表添加(常量列表和数据1、常量列表和数据2)无例外{
列表输出;
如果(data1.size()==data2.size())
{
转换(data1.begin()、data1.end()、data2.begin()、output.begin()、plus());
返回输出;
}
返回输出;
}

转换不会创建新元素,它只会写入您给它的第四个迭代器。因此,您需要首先调整列表的大小:

list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
    list<int> output(data1.size());
    if (data1.size() == data2.size())
    {
        transform(data1.begin(), data1.end(), data2.begin(), output.begin(),plus<int>());
        return output;
    }
    return output; 
}

transform不会创建新元素,它只会写入您给它的第四个迭代器。因此,您需要首先调整列表的大小:

list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
    list<int> output(data1.size());
    if (data1.size() == data2.size())
    {
        transform(data1.begin(), data1.end(), data2.begin(), output.begin(),plus<int>());
        return output;
    }
    return output; 
}

由于
输出
为空,因此您将得到错误。您可以使用
back\u插入器进行此操作

std::transform( data1.begin(), data1.end(), data2.begin(), std::back_inserter( output ), std::plus<int>() );

由于
output
为空,
output.begin()
返回一个指向
end
的迭代器,该迭代器会导致您看到的错误。

由于
output
为空,因此您得到了错误。您可以使用
back\u插入器进行此操作

std::transform( data1.begin(), data1.end(), data2.begin(), std::back_inserter( output ), std::plus<int>() );

由于
output
为空,
output.begin()
返回一个指向
end
的迭代器,该迭代器会导致您看到的错误

iterator start_one = data1.begin();
iterator start_two = data2.begin();
iterator start_three = output.begin();
*start_three = *start_one + *start_two;