2

配列内の範囲を返すいくつかの関数を作成する必要があります (必要に応じて、それらが開始位置と長さとして指定されていると仮定してもかまいません)。タプルを返すことはできないので、別の型を返す必要があります (いずれにせよ、それは良い考えかもしれません)。ここで、(ある程度) 標準であり、vtables、複雑な ctor などによるパフォーマンスの低下を招かないものを返したいと思います。

頭に浮かぶオプションは次のとおりです。

  1. std::pair<unsigned>(またはstd::pair<size_t>)。
  2. unsigned2 つの s (またはs)をラップする構造体size_t
  3. 独自の Range クラスをローリングし、ユーティリティ メソッドでシュガー コーティングします。

適切な Range クラスを探してみましたが、見つかりませんでした。標準ライブラリ/STL で範囲にクラスを使用するものがないのはちょっと奇妙です。

より良い代替手段はありますか?また、ない場合、上記のうちどれをお勧めしますか?

4

3 に答える 3

2

これに答えるのが難しい主な理由は、範囲がどのような状況で使用されるかが明確でないことです。あなたでさえ、おそらくまだ正確には知りません。

このような状況では、柔軟性を保つため、独自のクラスを作成することをお勧めします。必要に応じて、メンバー関数とネストされた typedef を追加できます。

最終的に、すべてのユースケースが明確になり、すべてのメンバー関数と補助関数が定義されたときに、ペアで置き換えることができることが判明した場合でも、クラスをtypedef.

内側の型については、これらの範囲を大量に格納したい場合を除き、整数よりも反復子をお勧めします (その場合、スペースの最適化が重要になり、2 つの整数 (オフセット + 長さ) がスペースの節約に役立ちます)。

于 2013-07-22T06:59:42.267 に答える