用于 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的主要内容,如果未能解决你的问题,请参考以下文章