gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:38:08 28 4
gpt4 key购买 nike

我正在使用transform和plus()合并2个列表,它引发了一个无法取消引用最终列表迭代器的错误。有人可以帮忙吗?谢谢

    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;
}

最佳答案

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

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;
}

或者使用向后插入迭代器,该迭代器会在列表中自动为每个元素调用“push_back”:
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(), std::back_inserter(output),plus<int>());
return output;
}
return output;
}

令人困惑的错误可能是由于对于一个空列表 begin() == end()而言,所以transform实际上试图这样做:
*output.end() = result;

关于c++ - C++无法取消引用结束列表迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59127337/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com