std :: vectorをラップし、ベクトルのサイズを格納するC++クラスを見ています。このクラスは、ベクトルが変更されるたびにこのサイズを更新し、多くの冗長なコードを生成します(最新のサイズは、size()メソッドから常に利用できるため)。これは本当に高速ですか、それともコンパイラはsize()の反復使用を最適化しますか?
1734 次
4 に答える
11
まず、以前の投稿で述べられているものとは異なり、std::vector
私が見た実装(MSおよびg ++)は
サイズをキャッシュしません。一方、単純なポインタ減算で計算でき、サイズをキャッシュするために行うことは、ほぼ確実に、節約するよりも多くのオーバーヘッドを追加します。
于 2013-01-28T16:34:26.303 に答える
6
std::vector::size
時間計算量は一定であるため、はい、すでにベクトルに格納されており、コードは冗長です。
于 2013-01-28T16:20:59.790 に答える
1
私が見たすべての実装では、キャッシュは遅くなります。メモリ帯域幅を浪費しているだけです。
于 2013-01-28T16:21:10.887 に答える
0
私の知る限り、の標準ライブラリの実装はvector::size
、キャッシュされたサイズを返すだけで、毎回再計算することはありません。
于 2013-01-28T16:21:09.507 に答える