首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++23中的std::string::contains的时间复杂度是多少?

C++23中的std::string::contains的时间复杂度是多少?
EN

Stack Overflow用户
提问于 2021-03-20 04:58:54
回答 2查看 663关注 0票数 3

首席执行官说std::string::contains要出来了,字符串/包含

但是不需要运行时。能保证在线性时间内运行吗?(例如,在实现中使用KMP算法)还是二次时间?

我试图在当前的C++标准草案(http://open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf)中找到它,但是找不到引用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-20 05:27:45

通过最近的草案contains是:

相当于: 返回basic_string_view(data(),size()).contains(x);

功能存在

相当于:return find(x) != npos;

由于使用basic_string_view::npos对整数进行相等测试是一个常数时间操作,所以时间复杂性basic_string_view::find

这个子子句中的成员函数在最坏的情况下具有复杂性O(size() * str.size()),尽管实现应该做得更好。

票数 6
EN

Stack Overflow用户

发布于 2021-04-14 21:30:01

提案(P1679)表示contains等同于find(x) != npos

最坏的情况是,复杂度可能是O(size() * str.size())。如果知道这两个字符串,则最多可以在编译时执行操作,因为std::string::containsstd::string_view::contains都是constexpr方法。

注意,目前(GCC 11)只有std::string_view在libstdc++中具有constexpr功能。

平凡的常数示例:https://godbolt.org/z/Ejosx43bM

提交添加包含()到libstdc++的GCC 11:https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=f004d6d9fab9fe732b94f0e7d254700795a37f30

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66718387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档