2017-01-30 14 views
0

外部依存関係のため、コンテナにデータを書き込む必要があります。Eigen :: VectorとStd :: Vectorの使い分けは?

はしかし、私はコンテナとしてエン使用する必要はありませんよこれで、他の時間がある、と私は標準std::vector<int>

は現在、私は私のコードを振りかけEigenstdベクトルを持って使用することができます。私は必ずしたいpush_back(<value>)

を使用するよりも、私はstd:vectorを使用することを決定しただけの時間、私はその場で挿入を行うことになります時にリサイズして再挿入すると、より多くの退屈な(そしておそらく計算コストが高い)であることから、ありますランダムに選択するのではなく、適切な時間にどちらか一方を使用しているということです。 std::vectorの代わりにEigen::Vectorを使用する正しいインスタンスは何ですか?

答えて

0

Eigenのクラスは、数学的オブジェクトを表します。この場合、行列上またはスカラ積との乗算のような、ベクトルに対するすべての一般的な演算を含む数学的なベクトル。

std :: vectorは本質的に(動的な)配列であり、連続したスペースにデータのリストを格納します。典型的な操作は、データの追加またはソートです。

あなたが使いたいものを決めるときは、これが数学的なベクトルかどうかを尋ねてください。両方を拡張して、他のものが想定されているものを保持し、std :: vectorよりもスカラー積を作成することができますが、なぜでしょうか?アイゲンはすでにそれをしています。それを意図したものに使うことは、あなたが表現しているものを誰にでも明瞭にさせ、可読性を高めます。

+0

私が使っているライブラリ(libigl)はその前提に従いません。私はそれがよりキャッシュフレンドリーでメモリ効率を高めることを意図していると思います。 Eigenとstdベクターの間のアクセスの速度、メモリには根本的な違いがありますか? (可読性は大きなプラスだと私は同意します) – Javier

+0

@Javier両方のメソッドが効率的に記述されていると仮定することは安全です。つまり、各メソッドが提供するすべてのメソッドが強力です。私たちがアクセスについて話すならば、どちらの場合でも効率的でなければなりません。疎なデータを扱う場合、Eigenはベクトルクラスが疎であるため、より効率的です。 std :: vectorは連続したデータを格納します。 – Aziuth

+0

Eigenは、そのデータ構造上でベクトル化された演算を実装します。したがって、データが数学演算を通過する場合、Eigenはおそらくあなたが望むものです。 – daragua

関連する問題