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