2011-02-02 12 views
4

この理由から、イテレータはQListと関連して有用であることはめったにありません。 STLスタイルのイテレータは メイクセンスを行う一つの 場所は、私はマクロのforeachはオプションではありませんループのために持っているので、場合反復子v.s. Qt内のループに基づくインデックス

ジェネリック

http://doc.qt.digia.com/4.2/qlist-iterator.html

に引数としてあります。イテレータやインデックスを使うべきですか?

for(int i = 0; i < list.size(); i++) { 

     Do something with list[i] 

     blah blah blah 

    } 



    for(QList<type>::iterator i = list.begin(); i != list.end(); ++i) { 

      Do something with *i 

      blah blah blah 

    } 

答えて

2

私はそれが「何とか何とか何とか」は本当に何に依存だと思うが、通常、私はstd::foreach機能と連動して後者の形式を選択したいが、それは味の問題だ、私は考えます。

ところで、マクロforeachを書くときはstd::foreachを意味しますか?その場合は、マクロではないことに注意してください。

+0

お返事ありがとうございます。それが味の問題であれば、私のプログラムでインデックスを使うのは間違いなく便利です。私は、医者がマクロと言っているQtのforeachを指していました。私はSTLにもマクロがあることを知らなかった。 – user421616

1

この特定の例では、大きな違いはありません。

それ以外は、stl型のイテレータを使って学ぶのは良い考えですが、実際にforeachのようにstlアルゴリズムの学習を始めると便利です。しかし、そこに止まらないでください。確かにtransformsortremove_copy_ifなどに行ってください。

結局のところ、それらは標準ライブラリの一部です!

+0

こんにちは、ありがとう。イテレータは私のアプリケーションには直感的ではないので、Qtでは標準ライブラリを使ってプログラミングしているときと違うかもしれないと思いました。主にその文のために私は引用した。 – user421616

2

私は、2つのバージョンの間でパフォーマンスのペナルティがどのようなものかを考慮したいと思います。常にlist [i]を計算するのは、+++を一度計算するよりはるかにコストがかかります。本当にインデックス表記法を使用し、あまりにも多くのパフォーマンスの低下を被りたくない場合は、そこに参照を入れて物事を保持することをお勧めします。

for(int i = 0; i < list.size(); ++i) { 

    ListItem &list_item = list[i]; 

    // do something with list_item 
} 

[私も++私の代わりに、それは一般的なルールとして、おそらく高速であるとして、私は++を使用すると思います。]

3

Qtは、それ自身のforeachマクロを持っています。私はforeachがオプションではない理由を考えることもできません...

最も重要な違いは、インデックスAPIで読みにくくなる可能性があるため、ループ内でリストの内容を変更する必要があるかどうかです。

あなたはちょうど私がそれらの好みを持っている項目ごとに何かをしたい場合:

    (const-)参照型と
  1. 使用するforeachやフレームワークが正しいこと
  2. 使用インデックスをやらせます"QListは、直接インデックスベースのアクセスがイテレータ" & "を使用するのと同じ速さで実装されるように実装されています(operator()よりも高速です)
  3. イテレータAPIを使用する

しかし、それは本当にスタイルの問題です。これがパフォーマンスのために非常に重要なものであれば、マイナーな違いについて心配する必要があります。再設計や独自の専門リストの作成について考える必要があります。

関連する問題