std :: stringには、c_str()のようなデータをフェッチするconstメンバーしかありません。しかし、私はoperator[]
経由で文字列の最初の要素への参照を取得することができ、私はそれに書き込むことができます。例えばstd :: stringに書き込むことはできますか?
、私が機能している場合:
void toupper(char *first,char *last_plus_one);
を、私は最初の要素へのポインタを取得し、ベクターに直接書き込むことができます。
vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());
私はSTDと同じことを行うことができます::文字列?
string message="Some Message";
toupper(&message[0],&message[0]+message.size());
標準でメモリの位置が実際に線形であることが保証されていますか?すなわち:
&(*(message.begin()+n)) == &message[n]
ありがとう。
あなたは、単に文字列のイテレータを使用することができTOUPPER機能をテンプレート化することはできません小文字に変換する文字列「s」を考えますポインタの代わりに? – jalf
もし私が私に聞くことはできませんでした。私は、ユニコードやその他のものをサポートしているかもしれない大きな第3回のparyライブラリを持っていると考えてください。そして、それらのAPIはポインタで動作します。テンプレートとしてこれを実装するのは単なるコストだからです。 – Artyom
@ jalf:スタンダードは手元にありませんが、std :: to_upperはまさにあなたが提案しているものと信じています。 –