###知りたいこと
エラーが起きている原因と解決方法などで気づいたことなどあればご教示頂けると助かります。
###現状
AOJの問題:マージソート:ALDS1_5_B
上記問題の疑似コードをC++で写経しながら実装したのですが
merge(vec, left, mid, right);
この部分でコンパイルエラーerror: no matching functionが起きています。
エラーから引数の指定方法や参照方法に問題がありそうなのですが・・・
引数は(配列,整数,整数,整数)で全て同じ型を使用してるし個数も順番も合っているのに何が間違っているのか分かりません。
表記を短くする為に質問用も兼ねて(unsigned long long)型を全て(int)型に変更してもみても同じエラーが出るので型の問題では無さそうです。
###エラー
c:\workvs\qa.cpp:13:36: error: no matching function for call to 'merge(std::vector<int>&, int&, int&, int&)' merge(vec, left, mid, right);
エラー画像
###サンプルコード
C++
1#include <bits/stdc++.h> 2const int INF = 2.19e15 + 1; 3 4void mergeSort(std::vector<int> vec, int left, int right) 5{ 6 int mid; 7 if (left + 1 < right) 8 { 9 mid = (left + right) / 2; 10 mergeSort(vec, left, mid); 11 mergeSort(vec, mid, right); 12 merge(vec, left, mid, right); 13 } 14} 15 16void merge(std::vector<int> vec, int left, int mid, int right) 17{ 18 int n1 = mid - left; 19 int n2 = right - mid; 20 21 std::vector<int> L(n1); 22 std::vector<int> R(n2); 23 24 for (int i = 0; i < n1 - 1; ++i) 25 { 26 L[i] = vec[left + i]; 27 } 28 L[n1] = INF; 29 30 for (int i = 0; i < n2 - 1; ++i) 31 { 32 R[i] = vec[mid + i]; 33 } 34 R[n2] = INF; 35 36 int i = 0; 37 int j = 0; 38 for (int k = left; k < right - 1; ++k) 39 { 40 if (L[i] <= R[j]) 41 { 42 vec[k] = L[i]; 43 i = i + 1; 44 } 45 else 46 { 47 vec[k] = R[j]; 48 j = j + 1; 49 } 50 } 51} 52 53void alds1_5_2() 54{ 55 std::vector<int> vec({2, 5, 3, 1, 4}); 56 mergeSort(vec, 0, vec.size()); 57 // prt(vec); 58} 59 60int main() 61{ 62 alds1_5_2(); 63 getchar(); 64 return 0; 65} 66
作成途中ですが期待する出力は入力した配列の昇順ソートです
1 2 3 4 5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/07 03:23