What is the complexity of std::string::substr memb

2020-02-14 10:28发布

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

标签: c++
3条回答
Viruses.
2楼-- · 2020-02-14 10:35

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.

查看更多
贪生不怕死
3楼-- · 2020-02-14 10:40

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.

查看更多
家丑人穷心不美
4楼-- · 2020-02-14 10:48

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

查看更多
登录 后发表回答