簡體   English   中英

錯誤:'operator+' 不匹配(操作數類型為 'std::__cxx11::list<int> ' 和 'int')|</int>

[英]Error: no match for 'operator+' (operand types are 'std::__cxx11::list<int>' and 'int')|

I'm trying to take an even integer array and odd integer list, and then try to merge them in a vector, using the merge algorithm available in STL of C++. 該任務需要專門使用合並算法,我在第 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;
}

您不能像使用 arrays 那樣向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::以提高可讀性。

odd_list.begin() (和類似的)上使用std::begin是有爭議的,取決於個人喜好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM