2016-05-02 21 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() 
{ 

} 

私は16行でエラーを取得していますし、エラーがあるの呼び出しに該当する機能:「マージ(のstd ::ベクトル<int>&、のstd ::ベクトル<int>&)

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

アム私は戻り値merge(v2,v3);と何か間違っていますか?

エラーを判断してポインタで何かありますか?

私はそれが動作するかどうかを確認するポインタベクトルとして宣言しようとしましたが、そうではありません。あなたが参照する前に、マージ機能を宣言する必要が

答えて

3

C++は、Cのように、上から下へ読みます。 mergesortの点でmergeが呼び出された時点で、その関数は存在しません。実装を逆にするか、mergeを上記のmergesortより上に宣言してください。

+0

は、それが動作する、ありがとうございます! – Auriga

3

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

C++では、を呼び出す前に関数を宣言する必要があります。

どちらの上部にある(mergesortの前に置く)トップへmergeの全体定義を移動したり、事前に宣言しmerge

std::vector <int> merge(std::vector <int> list1, std::vector <int> list2); 
関連する問題