4

文字列用の blitz++ ライブラリに相当するものはありますか (つまり、式全体が読み込まれるまで文字列の構築を遅らせることで文字列の構築/操作のパフォーマンスを向上させるライブラリ) はありますか?

Blitz++ は、テンプレート メタプログラミングによって行列/ベクトル操作の速度を向上させ、コンパイル時に "構文ツリー" などの式から構築し、A + B + C構文ツリーを評価します。このメソッドは、たとえば、文字列連結のパフォーマンスを向上させることができます。これは、 のような式を見た後s1 + s2 + s3、結果のサイズがわかるため、最初にメモリを割り当てるのではなく、メモリの割り当てとコピーを 1 つのステップで実行できるためです。をs1 + s2コピーし、 にメモリを割り当ててから(s1 + s2) + s3、再度コピーします。

4

1 に答える 1

1

QStringは、式テンプレートを使用して最終的な文字列のサイズを決定し、これを事前に効率的に割り当てることを知っています。基礎となるコードはそれほど難しくはなく、既存のほとんどの文字列クラスで機能するように作成できると思います。Qt 4.8マニュアルから:

QStringBuilder式テンプレートを使用し、'%'演算子を再実装して、の'%'代わりに文字列の連結に使用する場合'+'、最終結果がに割り当てられる直前まで、複数の部分文字列の連結が延期されるようにしQStringます。この時点で、最終結果に必要なメモリの量がわかります。次に、メモリアロケータが1回呼び出されて必要なスペースが取得され、サブストリングが1つずつコピーされます。

テクニックの例については、このテーマに関するwikiをご覧ください。

返される型はプロキシ型であり、またはの元の型ではないため、これは式テンプレートが使用される場所decltype(a+b)などに干渉することに注意してください。auto c = a+boperator+ab

于 2012-11-11T17:43:24.490 に答える