2017-08-06 9 views
2

ここに問題のコードがあります。 cplusplus.comから撮影。私の質問は、主な方法では何もそれに渡されていない場合、私自身がどのように働いているかです。関数がパラメータなしで動作する関数(C++)

私はそれがシグネチャであるため、コンパイラはエラーをスローしますが、そうではないだけでなく、私が望んでいるものと同じであると考えました。

ありがとうございます。

データ構造体クラスを取得する新しいプログラマ。この質問や方法を聞いたときに私がうんざりするかどうか教えてください。

ps。これはHWのほんの一部です。この問題はリンクリストとBSTの検索効率に大きな影響を与えました。そのため、置換が必要です。 cppreferenceで

// random_shuffle example 
#include <iostream>  // std::cout 
#include <algorithm> // std::random_shuffle 
#include <vector>  // std::vector 
#include <ctime>  // std::time 
#include <cstdlib>  // std::rand, std::srand 

// random generator function: 
int myrandom (int i) { return std::rand()%i;} 

int main() { 
    std::srand (unsigned (std::time(0))); 
    std::vector<int> myvector; 

    // set some values: 
    for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9 

    // using built-in random generator: 
    std::random_shuffle (myvector.begin(), myvector.end()); 

    // using myrandom: 
    std::random_shuffle (myvector.begin(), myvector.end(), myrandom); 

    // print out content: 
    std::cout << "myvector contains:"; 
    for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) 
    std::cout << ' ' << *it; 

    std::cout << '\n'; 

    return 0; 
} 
+3

cplusplus.comからより良いcppリファレンスサイトにアップグレードすることをお勧めします:http://en.cppreference.com/w/cpp/algorithm/random_shuffle - また、 'std :: random_shuffle'はC++で廃止予定です+14で削除し、C++で削除しました。 - 代わりに 'std :: shuffle'を使用してください。 –

+0

@Vannaありがとう、それはより意味をなさない – gabrielzalles

+0

@JesperJuhlはやります – gabrielzalles

答えて

4

あなたはstd::random_shuffleの可能inplementationを見ることができ、そしてそこにあなたはそれがどのように動作するかが表示されます:あなたはmyrandomを呼び出していない

std::random_shuffle (myvector.begin(), myvector.end(), myrandom); 

:あなたのラインで

template<class RandomIt, class RandomFunc> 
void random_shuffle(RandomIt first, RandomIt last, RandomFunc&& r) 
{ 
    typename std::iterator_traits<RandomIt>::difference_type i, n; 
    n = last - first; 
    for (i = n-1; i > 0; --i) { 
     using std::swap; 
     swap(first[i], first[r(i+1)]); 
    } 
} 

関数をパラメータとして渡すだけです。次に、そのパラメータを使用して、可能な実装のこの行に見るように、いくつかのパラメータで関数を呼び出すために使用されます。

swap(first[i], first[r(i+1)]); 

rはあなたのmyrandom機能を保持する変数です。

関連する問題