2016-05-02 8 views
0
#include <iostream> 
#include <algorithm> 
#include <vector> 

std::vector <int> mergesort(std::vector <int> list) 
{ 
    int n = list.size(); 
    if(n == 1) 
    { 
     return list;  
    } 
    std::vector<int> v2(list.begin(), list.begin() + list.size()/2), 
       v3(list.begin() + list.size()/2, list.end()); 
    v2 = mergesort(v2); 
    v3 = mergesort(v3); 
    return merge(v2, v3); 

} 

std::vector <int> merge(std::vector <int> list1, std::vector <int> list2) 
{ 
    std::vector <int> list3; 
    while(list1.size() > 0 && list2.size() > 0) 
    { 
     if(list1[0] > list2[0]) 
     { 
      list3.push_back (list2[0]); 
      list2.erase (list2.begin()); 
     } 
     else 
     { 
      list3.push_back (list1[0]); 
      list1.erase (list1.begin()); 
     } 
    } 
    while(list1.size() > 0) 
    { 
     list3.push_back (list1[0]); 
     list1.erase (list1.begin()); 
    } 
    while(list2.size() > 0) 
    { 
     list3.push_back (list2[0]); 
     list2.erase (list2.begin());  
    } 
    return list3; 
} 
int main() 
{ 

} 

Ich bin ein Fehler in Zeile 16 und der Fehler immer ist:keine passende Funktion für Aufruf von ‚merge (std :: vector <int> & std :: vector <int> &)

No matching function for call to 'merge(std::vector<int>&, std::vector<int>&) 

Am Ich mache etwas falsch mit der Rückkehr merge(v2,v3);?

Ist es mit etwas mit Zeigern durch die Beurteilung des Fehlers?

Ich habe versucht, als Zeiger Vektor zu erklären, ob das funktionieren würde, aber es nicht tut.

Antwort

3

C++, wie C, liest von oben nach unten. An der Stelle in mergesort, wo es merge aufruft, existiert diese Funktion nicht. Entweder Implementierungen invertieren oder merge über mergesort deklarieren.

+0

Vielen Dank, es funktioniert! – Auriga

3

Sie haben die Merge-Funktion zu deklarieren, bevor Referenzierung:

extern std::vector <int> merge(std::vector <int> list1, std::vector <int> list2); 
return merge(v2, v3); 
3

In C++ müssen Sie Funktionen vor dem Aufruf deklarieren.

Entweder bewegen Sie den gesamten Definition von merge nach oben (legen Sie sie vor mergesort) oder vorge erklären merge an der Spitze:

std::vector <int> merge(std::vector <int> list1, std::vector <int> list2); 
Verwandte Themen