Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the complexity of std::string::substr member function?

Tags:

c++

What is the complexity of std::string::substr member function? Is it defined by standard or implementation-defined?

like image 710
FrozenHeart Avatar asked Sep 16 '12 17:09

FrozenHeart


3 Answers

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.

like image 179
Jon Avatar answered Nov 02 '22 13:11

Jon


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.

like image 42
epsalon Avatar answered Nov 02 '22 13:11

epsalon


This is all that standard has to say about it:

n3242, 21.4.7.8

  1. Requires: pos <= size()
  2. Throws: out_of_range if pos > size()
  3. Effects: Determines the effective length rlen of the string to copy as the smaller of n and size() - pos
  4. 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

like image 33
jrok Avatar answered Nov 02 '22 13:11

jrok