用于 STL 容器的 std::string_view

Posted

技术标签:

【中文标题】用于 STL 容器的 std::string_view【英文标题】:std::string_view for STL containers 【发布时间】:2018-08-08 13:23:39 【问题描述】:

这里很好地解释了string_view 对象是什么。

除了 std::string 之外,是否有任何 STL 容器的“_view”对象?

在我看来,拥有它是一件非常有用的事情。想象一个std::vector_view 类,它只存储一个start 迭代器和一个length 字段。不真正拥有底层数据可以极大地提高效率。

【问题讨论】:

我觉得没用。想法是在后台实现一些内存管理,但通常如果你复制一个vector,你会改变它。因此无论如何你都需要复制它。如果你不打算改变它,那么你使用 const 指针或“&”没有风险。你们计划从不同的线程中执行此操作,那么复制通常会更好地避免任何竞争。所以最终这种特性的用例是相当罕见的,但它会增加代码的复杂性和额外的层。 @Arkady 我非常不同意。 _view 对象有一个定义明确的用例。正如您所指出的,它们并非在所有情况下都有效,但这并不能改变在某些情况下它们可以提供很大改进的事实。 【参考方案1】:

有一个span 的提议,它是一个连续范围对象的视图:http://wg21.link/p0122。另见:What is a “span” and when should I use one?。

GSL 库还提供了gsl::span


这可能会拉长它,但我也提出了function_ref,这基本上是对Callable 的看法:http://wg21.link/p0792

【讨论】:

以上是关于用于 STL 容器的 std::string_view的主要内容,如果未能解决你的问题,请参考以下文章

STL概念

C++11:is_member_pointer 不适用于许多 STL 容器函数

STL

函数返回迭代器以构造 STL 容器

讲解STL

指向特定类型的 STL 容器样式和迭代器 (C++)