小编sim*_*ame的帖子

连接 string_view 对象

我一直std::string_view在一些旧代码中添加 s 来表示配置参数等字符串,因为它提供了只读视图,由于不需要复制,速度更快。

string_view但是,由于operator+未定义,因此无法将两个连接在一起。我看到这个问题有几个答案表明它是一个疏忽,并且有一个建议添加它。但是,这是添加 astring和 a string_view,大概如果实现的话,生成的串联将是std::string

添加两个string_view也属于同一类别吗?如果不是,为什么不string_view支持添加两个?

样本

std::string_view s1{"concate"};
std::string_view s2{"nate"};
std::string_view s3{s1 + s2};
Run Code Online (Sandbox Code Playgroud)

这是错误

error: no match for 'operator+' (operand types are 'std::string_view' {aka 'std::basic_string_view<char>'} and 'std::string_view' {aka 'std::basic_string_view<char>'})
Run Code Online (Sandbox Code Playgroud)

c++ string-concatenation string-view c++17

10
推荐指数
3
解决办法
1万
查看次数

打印向量时 std::for_each 和 std::copy、std::ostream_iterator&lt;T&gt; 之间的差异

最近,我遇到了打印类似vector这样的代码

std::copy(vec.begin(), vec.end(), std::ostream_iterator<T>(std::cout, " ");
Run Code Online (Sandbox Code Playgroud)

将其与我习惯的(for_each或基于范围的 for 循环)进行比较

auto print = [](const auto & element){std::cout << element << " ";};
std::for_each(vec.begin(), vec.end(), print);
Run Code Online (Sandbox Code Playgroud)
  1. copy方法是否会创建额外的副本?在for_each我可以有一个常量引用。
  2. 的文档copy指出它将元素从一个范围复制到另一个范围。std::ostream_iterator<T>范围如何?如果是的话那么它从哪里开始和结束?
  3. 我需要将该copy方法模板化,而for_each我可以auto这样看起来更方便。

这让我感觉这个for_each方法更好?

c++ foreach copy vector ostream

1
推荐指数
1
解决办法
306
查看次数