2017-06-03 10 views
0

C参照渡しベクトルオブジェクト上で動作していません{(std :: vector :: size_type)endn)) '、これは非クラス型です' __gnu_cxx ::(std :: vector :: size_type)endn) __alloc_traits> :: VALUE_TYPE {別名int型} '| "`スワップ()関数は、私は、関数partitionk()、私はエラーに</p> <p>"エラーが出る中でのスワップ()を使用しようとする++

enter code here 

#include <iostream> 
#include <vector> 
#include <unordered_map> 
#include <cstdlib> 
using namespace std; 

int partitionk(vector<int>& num_list , int start, int endn ) { 
     int pindex = start; 
     int rand_num = rand() % endn; 
     num_list[endn].swap(num_list[rand_num]); // getting error 

     for (int i = 1 ; i < endn ; i++){ 
      if (num_list[i] < num_list[endn]){ 
       num_list[i].swap(num_list[pindex]); // getting error 
       pindex += 1; 
      } 
     } 
     num_list[endn].swap(num_list[pindex]);  // getting error 
     return pindex; 
} 

void quick_sort(vector<int>& num_list , int start, int endn ){ 
     if (start >= endn) return ; 

     else{ 
      int index = partitionk( num_list , start, endn ) ; 

       quick_sort(num_list , start, index); 
      quick_sort(num_list , index+1, endn ); 

     } 
} 

int main() 
{ 
    vector <int> nums= {4,7,1,3,9,5}; 
    quick_sort(nums , 0 , nums.size()-1); 

    for (auto i : nums){ 
     cout << i << " "; 
    } 

} 
+0

'num_list [endn]'はメンバ関数を持たない 'int'ですが、' swap'を呼び出そうとします。あなたは何をしようとしていますか? – DeiDei

答えて

0

使用std::swap()

std::swap(num_list[endn], num_list[num]]; 

ベクターメンバーswap()は、entire vectorsを交換するためのものです。 swap()を使用すると、ベクターアイテムのスワップメンバ、つまりintを呼び出そうとします。このタイプにはswap()はありません。

関連する問題