std::string::substr
メンバー関数の複雑さは? 標準または実装定義で定義されていますか?
質問する
14151 次
3 に答える
2
単純な実装は O(k) です。ここで、k は結果の部分文字列の長さです。std::string はコピーオンライトをサポートしていません。O(1) 部分文字列操作が必要な場合は、 Ropeなどのデータ構造を使用します。
于 2012-09-16T18:06:40.050 に答える
2
C++11 標準はsubstr
、21.4.7.8 または私が見つけた他のどこでも、のパフォーマンス特性を定義していません。実際には、結果の長さでほぼ確実にO(n)
パフォーマンスを期待できます。n
于 2012-09-16T18:07:55.177 に答える
1
これは、標準がそれについて言わなければならないすべてです:
n3242、21.4.7.8
- 必要:
pos <= size()
- スロー:
out_of_range
ifpos > size()
- 効果: コピーする文字列の有効な長さを、と
rlen
の小さい方として決定します。n
size() - pos
- 戻り値:
basic_string<charT,traits,Allocator>(data()+pos,rlen)
.
したがって、答えはノーです。複雑さは定義されていません。
編集: n3242 に従って修正、pos > size not pos >= size
于 2012-09-16T18:09:27.523 に答える