std::string について

解決


LIS  2009-06-06 23:07:57  No: 70292

こんにちは、質問させてください。
std::stringについて知りたいことが2点あります。
環境は VC++6.0で、MFCは使ってません。

【1つめ】
std::string に "AABBCCDD" のようれた文字列を格納してます。
最後の一文字だけ取り除きたいです。

reserve() か resize() かなと思うのですが、
どのような違いがあり、どちらを使うべきでしょうか?
また、他の方法があれば教えてください。

【2つめ】
erase() と reserve(0) はどうやって使い分ければよいでしょうか?
また、例えば初期化時に str.erase() をするとどのようなことが内部で
起こるのでしょうか?

reserve(0) は new TCHAR[0] みたいなことかなと、想像してます。

今まではTCHAR[] や LPCTSTR などしか使ってこなかったのですが、
STLの便利さに気付き、覚えていきたいと思ってます。
よろしくお願いします。


επιστημη  URL  2009-06-07 08:39:35  No: 70293

#include <iostream>
> std::string に "AABBCCDD" のようれた文字列を格納してます。
> 最後の一文字だけ取り除きたいです。

#include <string>

using namespace std;

int main() {
  string str = "AABBCCDD";
  str.erase(str.size()-1);
  cout << str << endl;
}

> erase() と reserve(0) はどうやって使い分ければよいでしょうか?

まったくの"別物"です。
マニュアルを読んでください。


LIS  2009-06-07 16:55:00  No: 70294

επιστημηさま

お返事ありがとうございます。

> まったくの"別物"です。
> マニュアルを読んでください。

マニュアルというものがあるのでしょうか?
参考になるサイトなどもありましたら、教えて頂けませんでしょうか?
(出来れば私でも分かりそうなレベルがよいです)

私はSTLの知識はほとんどありませんので、常に調べながら
進めています。
以下のようなサイトを見つつ勉強してますが、やはりerase(), reserve(),
resize() の違いについて詳しく書いてありません。

http://www.cppll.jp/cppreference/
http://www.wakhok.ac.jp/~sumi/stl/header/string.html
http://www5c.biglobe.ne.jp/~ecb/cpp/07_19_03.html

※説明に「削除」と書いてあったりするのですが、
  「削除」が具体的にどういう意味なのかが知りたいのですが。。。

よろしくお願いします。


επιστημη  URL  2009-06-07 17:40:44  No: 70295

> マニュアルというものがあるのでしょうか?
> 参考になるサイトなどもありましたら、教えて頂けませんでしょうか?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2857.pdf

>(出来れば私でも分かりそうなレベルがよいです)

あなたのレベルがわかりません。


Ban  2009-06-08 06:53:42  No: 70296

> マニュアルというものがあるのでしょうか?

VCのマニュアルはMSDNと呼ばれます。(以下、オンライン版)
http://msdn.microsoft.com/en-us/library/syxtdd4f(VS.80).aspx

そして、επιστημηさんが提示しているのは、
C++の言語仕様書(の最新ドラフト)です。

いずれも原典といえる情報でしょう。

機能としては、英単語の通りかと思います。
erase:削除する(読んで字の通り指定した文字が削除されますが、
 何が不明ですか。 先のεπιστημηさんの例はわかりますか。
「具体的に」とありますが、具体的な例は実際に実行してみましたか?)
reserve:サイズを予約する(Allocateだけしておくがサイズはそのまま)
resize:実際に文字列のサイズを変える

参考にされているサイトにも説明があります。
http://www.wakhok.ac.jp/~sumi/stl/header/string.html#size


ryo  2009-06-08 07:08:07  No: 70297

VC6の日本語版なら、標準ライブラリも
MSDNは日本語化されてる

それ以降は、「日本語版」のくせに・・・


LIS  2009-07-01 09:46:50  No: 70298

επιστημηさま、Banさま、ryoさま

お返事ありがとうございます。
また返信が遅れてしまい、申し訳ありません。

あれからWebのドキュメントを漁り、
それでもいまいちピンと来ず曖昧なままだったのですが、
何度もSTLを使っているうちにコツが分かってきました。

>  何が不明ですか。 先のεπιστημηさんの例はわかりますか。

分かります。ありがとうございます。
「削除」や「予約」や「変更」などを行うことで、
メモリ上で実際にどういう風に変化があるのかが気になっていたのですが、
それを知らずとも問題なく使えることが分かってきました。
(ソースも見て見ましたが、複雑過ぎて自分には理解出来ませんでした)

みなさま、どうもありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加