2

deque<int>引数がコンストラクターに渡される場合、型のメンバーを使用する必要があるクラスがあり、そうでない場合、メンバーは使用されません。この状況に効率的かつスタイル的に対処する最善の方法は何ですか?

また、このクラスのオブジェクトは同じ関数に渡すことができる必要があることにも言及したいと思いますが、同じコンテナーに格納する機能を削除しても問題ありません。私はポリモーフィズムを行ったことはありませんが (コメントで示唆されているように)、それについて読んで試してみることにします。

私の 2 つのアイデア:
- メンバー変数を として保持します。deque<int>これは空として格納されるとdeque<int>思います。
- へのポインターを使用し、必要な場合にdeque<int>のみ呼び出します。new

4

3 に答える 3

0

使用するために初期化するときに、deque メンバーへのポインターを設定することもできます。

deque<int> queue_;
deque<int> *ptr_;

ptr_(NULL); // not used

ptr_(&queue_);

ただし、速度に関しては、ほとんどの場合キューを使用しない場合、デフォルトではポインターに NULL を設定するだけなので、新しい方が高速になる可能性があります。50/50 で使用する場合、これ以上ヒープを処理する必要がないため、私の方法はおそらく最速の方法の 1 つです。

于 2013-05-26T02:59:46.543 に答える
0

パフォーマンスが問題になる場合は、おそらく「is_initialized」ブール値フラグとともにオプション 1 を使用します。

class A
{
  bool is_initialized;    
  public:
     A(bool used=false):is_initialized(used)  
     {
     }; 
  private:
     deque<int> _d;
};

はい、deque を使用しない場合はオプション 2 でメモリを少し節約できるかもしれませんが、deque を使用すると、ポインターを逆参照するオーバーヘッドが発生します。

于 2013-05-26T03:21:49.803 に答える
0

あなたが探しているのはまさにboost::optional<deque<int>>. ここであなたの意図をより明確かつ正確に文書化するものは他にありません。

于 2013-05-26T05:08:09.373 に答える