-5

次のような文字列と、次のようなstring x;文字のベクトルを宣言したとします:vector<char> x_vec;

cout<<x;

以上

for(int i=0;i<x.length();i++)
      cout<<x[i];

または

for(int i=0;i<x_vec.size();i++)
      cout<<x_vec[i];

パフォーマンスで?string私の要点は、 s とvectors の char のどちらかを選択しなければならない点に到達することが非常に多いからです。最初の例は、実際にプログラムによって他の例とは異なる方法で処理またはアプローチされますか?


エミュレータまたはブルースタックでテストしている場合は、127.0.0.1 を 10.0.2.2 に変更してください。

それ以外の場合は、url(27.0.0.1/mysite/index.php) が適切です。問題に直面した場合は、最初にローカルホストが機能しているかどうかを確認し、マニフェストで android.permission.internet を使用しました。

4

3 に答える 3

6

私のポイントは、文字列と文字のベクトルのどちらかを選択する必要があるという点に到達することが非常に多いためです。

よく?私はそうは思わない。

何かが基本的に文字列である場合は、単に使用してstd::stringください。

パフォーマンスが最適ではないことを証明できる場合(通常は、実際のデータでプログラムをプロファイリングすることによって) は、別の方法を検討してください。std::vector<char>はそのような代替手段の 1 つですが、他にもあります。どちらが望ましいかは、実際のユースケースによって異なります。

おそらく、現実世界の説得力のstd::stringあるstd::vector<char>.

于 2013-09-15T18:30:36.473 に答える
1

3 つのケースすべてにループがあります。最初のケースでは、ループを実行operator <<する OS を呼び出す実装内にありますが、他の 2 つのケースではコード内にあります。

最後の 2 つのケースは、生成されたコードに関してではないにしても、パフォーマンスに関しては同じです。文字列とベクトルの両方が連続したストレージを使用するため、それらoperator []の は非常に高速です。

ループがオペレーターの実装に属する最初のケースは、実装が基礎となるオペレーティング システムを呼び出すときに最適化される可能性があります。ただし、最も重要なポイントは読みやすさです。単純なステートメントを含む 1 行は、単純なループよりも読みやすくなります。

一般に、s の文字列とベクトルの最大の違いはchar、2 つのコンテナーでサポートされるプリミティブのセットです。文字列は、文字列のようなセマンティクス (部分文字列の作成、単純な検索) を伝えることを目的としていますが、ベクトルは配列のようなセマンティクスを伝えるのに適しています。 (任意のインデックスにすばやくアクセスできるアイテムのシーケンシャル コレクション)。パフォーマンスに関しては、2 つの構造は非常に似ています。

于 2013-09-15T18:35:41.287 に答える