0

Java と C# の知識を備えた一般的なプログラミングのバックグラウンドから、いくつかの C++ を学び始めています。いくつかの文字列を扱っていますが、いくつかの文字列関数に不満があります。私は、古い文字列をそのまま残して新しい文字列を返す文字列関数に慣れています。文字列は不変であるため、これが C# と Java で行われていることは理解していますが、C++ の文字列メソッドもこのように機能することを本当に望んでいます。足りないものはありますか?今、私はこのようなことをしています:

std::string temp = word;
Func(temp.erase(i , 1));

編集:これは私が考えていたことのようなものです:

Func(word.substr().erase(i , 1);

みなさんはこの中でどれが一番いいと思いますか? それは些細なことだと思います。

4

2 に答える 2

1

コピーが必要なときはいつでも、明示的に宣言します。

std::string copy = original;
copy.erase(startPos, size);

実際にはコピーが必要ないときに文字列を常にコピーするのはパフォーマンスの無駄です。C++ は非常に高性能になるように設計されているため、大規模なプログラム (ゲーム、オフィス スイート、Web ブラウザーなど) は古いハードウェアでもスムーズに実行できます。

この非常に重要なニーズを満たすための C++ のモットーは、「必要のないものにお金を払わない」であり、言語全体がそれに基づいて設計されています。

これは、Java のような他の言語が劣っている、または優れているという意味ではなく、目的とニーズが異なり、機能が異なるというだけです。Java の主な目的は、「どこでもどこでも同じ実行可能ファイルを実行する」(文字通り、「一度書けばどこでも実行できる」) ことです。これが Java が仮想マシン上に存在する理由であり、Java コードが 10 ドルの携帯電話、1000 ドルのスマートフォン、テレビ、コンピューター、Web ブラウザー、および電子レンジ。

于 2013-03-28T20:10:14.497 に答える
1

C++ では、両方の可能性があります。「その場で」編集するか、新しい文字列を返すには、たとえばsubstrを使用できます。

なるほど、分かりました。その変種:

Func( string(word).erase(i,1) );
于 2013-03-28T20:04:33.637 に答える