2017-10-22 6 views
0

私は整数の入力vectorを受け取り、これらの整数のすべての可能な順列を出力するプログラムを作成しました。ユーザー/クライアントによって呼び出されるべきPermutate void Permutate(//input)void DoPermute(//necessary arguments) のみ方法:私のプログラムは二つの方法があることを行うためにC++置換アルゴリズムにクラスを使用するかどうか

DoPermutateは、最初にPermutateによって呼び出され、アルゴリズムのロジックを提供する再帰的メソッドです。 質問は今:あなたはclassPermutateDoPermutate入れてDoPermutateprivateを作る、またはあなたがグローバルスコープで両方の方法を置くと、ユーザ/クライアントにDoPermutateを公開するため、すべてのclassesを使用していないのでしょうか? cmathにはグローバルスコープ内のユーティリティメソッドも含まれているので、私はこれを求めています。 もっと洗練されたアプローチは何ですか?今

+5

私はこれは学校の授業などのためのものだと思いますか?それ以外の場合は、['std :: next_permutation'](http://en.cppreference.com/w/cpp/algorithm/next_permutation)を使うだけでよいからです。 –

+2

[std :: next_permutation](http://en.cppreference.com/w/cpp/algorithm/next_permutation)が既に存在することは知っていますか? –

+2

一般的なルールは次のとおりです。関数がパラメータとして提供されていない状態情報を必要としない場合は、クラスに入れないでください。 – user4581301

答えて

1

質問:

  1. など、namespacePermutateを宣言します。あなたは

クラスにPermutateDoPermutateを置くこれは私がするがどうなるかであります

namespace MyApp 
{ 
    // Declare 
    void Permutate(...); // Add all the necessary arguments, 
          // which can be input arguments ad 
          // output arguments. 
} 

この宣言は、クラスが実装で使用されているかどうかを公開していないことに注意してください。これは、インターフェイスで公開する必要のない実装の詳細です。

  • 実装でクラスを使用すると便利です。

    namespace MyApp 
    { 
        // Helper class 
        struct PermutateClass { ... }; 
    
        // Implement the user facing function. 
        void Permutate (...) 
        { 
         // Delegate the implementation to the helper class. 
         PermuateClass p(...); 
         p.doIt(); 
        } 
    } 
    
  • クラスを使用すると役立たない場合は、必要に応じてヘルパー関数を使用してください。

    namespace MyApp 
    { 
        // Helper function 
        void DoPermutate (...) { ... } 
    
        // Implement the user facing function. 
        void Permutate (...) 
        { 
         // Delegate the implementation to the helper function. 
         DoPermutate p(...); 
        } 
    } 
    
  • 私が強調したい重要なポイントは、あなたがメンバ関数の束または非メンバ関数の束とヘルパークラスを使用するかどうかをせずに選択することができるはず実装の詳細があるということですユーザー向きの機能のユーザーに影響を与えます。

    関連する問題