こんにちは、質問させてください。
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の便利さに気付き、覚えていきたいと思ってます。
よろしくお願いします。
#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) はどうやって使い分ければよいでしょうか?
まったくの"別物"です。
マニュアルを読んでください。
επιστημηさま
お返事ありがとうございます。
> まったくの"別物"です。
> マニュアルを読んでください。
マニュアルというものがあるのでしょうか?
参考になるサイトなどもありましたら、教えて頂けませんでしょうか?
(出来れば私でも分かりそうなレベルがよいです)
私は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
※説明に「削除」と書いてあったりするのですが、
「削除」が具体的にどういう意味なのかが知りたいのですが。。。
よろしくお願いします。
> マニュアルというものがあるのでしょうか?
> 参考になるサイトなどもありましたら、教えて頂けませんでしょうか?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2857.pdf
>(出来れば私でも分かりそうなレベルがよいです)
あなたのレベルがわかりません。
> マニュアルというものがあるのでしょうか?
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
VC6の日本語版なら、標準ライブラリも
MSDNは日本語化されてる
それ以降は、「日本語版」のくせに・・・
επιστημηさま、Banさま、ryoさま
お返事ありがとうございます。
また返信が遅れてしまい、申し訳ありません。
あれからWebのドキュメントを漁り、
それでもいまいちピンと来ず曖昧なままだったのですが、
何度もSTLを使っているうちにコツが分かってきました。
> 何が不明ですか。 先のεπιστημηさんの例はわかりますか。
分かります。ありがとうございます。
「削除」や「予約」や「変更」などを行うことで、
メモリ上で実際にどういう風に変化があるのかが気になっていたのですが、
それを知らずとも問題なく使えることが分かってきました。
(ソースも見て見ましたが、複雑過ぎて自分には理解出来ませんでした)
みなさま、どうもありがとうございました!
ツイート | ![]() |