错误:'operator+'不匹配(操作数类型为 'std::__cxx11::list<int>' 和"int")|



我正在尝试使用C++的STL中提供的merge算法,获取偶数整数数组和奇数整数列表,然后尝试将它们合并到向量中。该任务特别需要使用合并算法,而我在第43行处遇到了错误,我已经评论说这就是错误点。

#include <iostream>
#include <algorithm>
#include <functional>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
using namespace std;
void display(list<int>&l){
list<int>::iterator p;
for(p=l.begin();p!=l.end();++p){
cout<<*p<<", ";
}
cout<<"n";
}
void display(int arr[6]){
for(int i=0;i<6;i++){
cout<<arr[i]<<" ";
}
cout<<"n";
}
int main()
{
int inp;
int even_arr[6];
list<int> odd_list(6);
cout<<"Enter even numbers: ";
for(int i=0;i<6;i++){
cin>>even_arr[i];
}
display(even_arr);
list<int>::iterator p;
cout<<"nEnter odd numbers: ";
for(p=odd_list.begin();p!=odd_list.end();++p){
cin>>inp;
*p = inp;
}
display(odd_list);
vector<int> vec1(12);
list<int>::iterator itr=odd_list.begin();
int *ptr=even_arr;
merge(even_arr,even_arr+6,odd_list,odd_list+6,vec1);   //ERROR LINE
return 0;
}

不能像对数组那样向std::list添加某些内容。此外,最好明确迭代器,并使用std::end来获取结束迭代器的结果,因为无论如何都要使用整个数组。

此外,std::merge()需要迭代器,但最后一个参数是vec1,它是std::vector。正确的版本是:

merge(begin(even_arr), end(even_arr),
begin(odd_list), end(odd_list),
begin(vec1));

为了提高可读性,我省略了std::

使用std::begin而不是odd_list.begin()(以及类似的(是有争议的,并且取决于个人偏好。

最新更新