19

の使い方についてアドバイスをいただきたいですBOOST_FOREACH

私は、パフォーマンスが非常に重いヘッダーであるという点で、実際には推奨されていないことを読みました。

さらに、ブール値によって駆動される終了条件を実際に持つことはできないため、「break」および「continue」ステートメントの使用を強制します。「break」および「continue」は可能な限り避けるべきであると常に言われてきました。

もちろん、イテレータを直接処理しないという利点があるため、コンテナを反復処理するタスクが容易になります。

あなたはそれについてどう思いますか?

使用する場合、プロジェクトの均一性を保証するために体系的に採用する必要があると思いますか、それとも特定の状況でのみ使用することをお勧めしますか?

4

3 に答える 3

25

C++ の範囲ベースのループがそれに取って代わると思います。これは、この BOOST_FOREACH の例と同等です:

std::string hello( "Hello, world!" );
for (auto c : hello)
{
  std::cout << c;
}

++03で使用する必要があるとは思いませんでした。

要素のコピーにコストがかかるコンテナーに対して範囲ベースのループを使用する場合、または一般的なコンテキストで使用する場合は、これらの要素に対して使用するのが最適ですconst&

SomeContainerType<SomeType> v = ....;
for (const auto& elem : v)
{
  std::cout << elem << " ";
}

同様に、コンテナの要素を変更する必要がある場合は、非定数 & ( auto& elem : v) を使用します。

于 2013-02-21T10:51:12.490 に答える
9

プログラミングでは、明快さが切り札です。私は常に C++03 で boost foreach を使用してきましたが、手書きのループよりもはるかに読みやすいことがわかりました。ヘッダーのサイズが問題になることはありません。もちろん、@juanchopanzaが正しく指摘したように、この質問はC++ 11では廃止されています。

中断と継続に関するあなたの懸念は根拠がなく、おそらく逆効果です。C++03 の従来の長い for ループ ヘッダーでは、人々はループ ヘッダーを読まない傾向があり、ループ ヘッダーに隠れている条件変数を見落としがちです。ブレーク アンド コンティニューで意図を明確にすることをお勧めします。

boost foreach を使用することにした場合は、体系的に使用してください。結局のところ、パンとバターのループを置き換えるために使用されることになっています.

于 2013-02-21T10:54:40.310 に答える