37

こんにちは、ベクトルとこれらのベクトルの要素のインデックスを多く扱うプログラムがありますが、疑問に思っていました:

  1. との間に違いはuintありますかunsigned int
  2. int上記のタイプのいずれかを使用するか、コンパイラーが int 値をより効率的に処理すると言う人がいると読んだだけで使用する方が良いですが、使用するintと、負の idx を常にチェックする必要があり、これは苦痛です。
  3. イテレータの方が優れていると思いますか? 通常のインデックス作成よりも効率的vectorx[idx]ですか?

PSソフトウェアは大規模なデータプロセスを処理し、優れたパフォーマンスは必須の要件です

4

4 に答える 4

52
  1. C++ では、 のような型は定義されていませんuint。これは「あなたの」タイプ、つまりあなたのコードまたはサードパーティのライブラリで定義されたタイプでなければなりません。と同じであると推測できunsigned intます。unsigned long intでも何か他のものかもしれません。とにかく、自分で確認する必要があります。

  2. 個人のスタイルの問題です。たとえば、サイズや数量などの自然に負でない値を表すには、符号なしの型を使用する必要があると思います。いくつかの特定のコンテキストを除いて、符号付き型と符号なし型の間にパフォーマンスの違いはありません。ほとんどの場合、より効率的に処理されるのはunsigned型であると言えます。

  3. イテレータは実装をより一般的なものにします。つまり、順次アクセスのイテレータを使用して、実装を任意の順次データ構造に適用できるようにします。インデックスを使用すると、データ構造にランダム アクセス要件が課せられます。これは強力な要件です。本当に必要がないのに、強い要件を課すのは得策ではありません。

于 2010-08-23T22:13:35.050 に答える
3

ベクトルを順番にループする場合は、必ずイテレータを使用してください。インデックスの種類に関係なく、インデックス作成に関連するオーバーヘッドがありますが、これは反復することで回避できます。

于 2010-08-23T22:14:23.173 に答える
2

1) uint = unsigned int、実際には uint は unsigned int のtypedefにすぎません (コンパイル時に unsigned int に置き換えられます)。

2) コードに「セキュリティ」を追加したい場合は、uint を使用すると、確実に負の値を回避できます。

3) ベクトルを順次実行する場合は、反復子を使用します。これらは順次ループ用に最適化されています (それらはある種のポインターです)。

于 2010-08-23T22:24:02.310 に答える
0

他のポスターが指摘しているように、 uint はおそらくunsignedintの typedef ですVisual StudioF12を使用している場合、テキストカーソルが入っている間に を押しuintてその定義を 確認することで、その事実を非常に迅速に確認できます。

于 2016-10-06T19:20:54.187 に答える