What is the complexity of std::string::substr member function? Is it defined by standard or implementation-defined?
The C++11 standard does not define the performance characteristics of substr, either in 21.4.7.8 or anywhere else I could find. In practice you can almost certainly expect O(n) performance with n being the length of the result.
A naïve implementation would be O(k) where k is the length of the resulting substring. std::string does not support copy-on-write. If you want O(1) substring operations, use a data structure such as a Rope.
This is all that standard has to say about it:
n3242, 21.4.7.8
- Requires:
pos <= size()- Throws:
out_of_rangeifpos > size()- Effects: Determines the effective length
rlenof the string to copy as the smaller ofnandsize() - pos- Returns:
basic_string<charT,traits,Allocator>(data()+pos,rlen).
So the answer would be no, the complexity is not defined.
EDIT: Corrected as per n3242, pos > size not pos >= size
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With