_std::array
_を使用して独自の配列を作成する必要がある特定の条件または要件は何ですか?
これが私の背景です:
私は、少数の人々が使用するうまくいけばをベースにした小さなシンプルなライブラリを開発しています。現在の構造では、iterators
を使用して_std::vector
_と_std::array
_の両方を使用できますが、多くの人は_std::array
_を使用するのが嫌で、使用するように見えず、表記がわかりにくい場合がありますライブラリを操作します。
私は自分のライブラリを_std::array
_でより良く機能するように試みましたが、おそらく自分で自分のものを提供し、必要な機能を追加する必要があると思いました。
例:library::array<int, 2> myArray; myArray.fill(1, 100);
と私は、特にtemplates
と他のsorting
アルゴリズムで、自分のスキルを伸ばすための良いプロジェクトになると思いました。
[m, n, p]
にします[p*n, p, 1]
[i, j, k]
の要素にアクセスするには、その線形化された要素のインデックスを次のように計算できます。[i, j, k] dotproduct [p*n, p, 1]
((((i * n) + j) * p) + k)
(i, j, k)
を指定私はあなたのライブラリは一般的なものであり、絶対に必要な場合を除いて、ベクトル/配列型に結び付けられてはならないものだと思います。汎用性はイテレーターによって提供されます-イテレーターはアルゴリズムとコンテナー間のインターフェースです。
インターフェースを見てください C++アルゴリズムが提供する 。与えられたアルゴリズムは、特定のプロパティを持ついくつかの反復子を必要とするだけです。コンテナがそのようなイテレータを提供している限り、アルゴリズムはコンテナ自体を気にしません。
イテレータの観点から考えると、std::array
およびstd::vector
動作は同じです。どちらにも順方向および逆方向のランダムアクセス反復子があります。アルゴリズムがそのような反復子を使用できる場合は、両方で使用できますstd::array
およびstd::vector
。
インターフェースとしてイテレーターを使用しているとは私はよく思いません。そうした場合、イテレーターの元になるコンテナーのタイプがインターフェースのどこにも表示されないためです。まあ、明示的にstd::array<T>::iterator
-それは確かに非常に悪いスタイルになるでしょう。
ライブラリから独自の配列クラスを提供する唯一の理由は、現在提供されているもの(std::array
、std::vector
およびraw配列)が要件に適合しない場合です。たとえば、動的割り当てなしで境界チェックを実行する配列が必要な場合は、std::array
を導入する前に自分でそれを記述する必要がありました。
ライブラリでの配列クラスの受け入れに関する限り、std::array
はC++言語へのかなり新しい追加であり、独自の配列クラスを持つ既存のライブラリのヒープがあることを理解する必要があります。
ライブラリをより速く受け入れるには、有用な機能を提供することに加えて、少なくともすべての配列のような型の最も低い共通の特徴、つまり単純なポインタを受け入れる必要があります。