You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::string构造std::string_view的时间复杂度是线性还是常量?

你给出的测试代码如下:

using namespace std;

#include<string>
#include<string_view>
#include<iostream>

int main()
{
    string s = "someString";
    string_view sV = string_view(s);
    string_view sVTwo = string_view(begin(s), end(s));
    return 0;
}

两个构造调用的逻辑及时间复杂度

  • 构造sV时调用的是适配std::string类型的构造重载。std::string内部本身存储了底层字符数组的首指针和字符串长度,构造string_view只需要把这两个值拷贝到string_view的内部成员即可,时间复杂度为常量O(1),和s的字符数量完全无关。
  • 构造sVTwo时调用的是迭代器版本的构造重载。std::string的迭代器属于随机访问迭代器,两个随机访问迭代器的差值计算是O(1)操作,再把首迭代器对应的地址和计算得到的长度赋值给string_view内部成员,整体时间复杂度也是常量O(1),不会随字符串长度变化。

只有当传入的迭代器是输入迭代器、前向迭代器这类不支持O(1)求距离的迭代器类型时,迭代器版本的string_view构造才会是线性复杂度,你这里用std::string的迭代器不属于这类情况。

内容的提问来源于stack exchange,提问作者Hisham Hijjawi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:24:04