以向量<string_view>作为参数有意义吗

问题描述 投票:0回答:1

我想要一个函数,该函数将我不想修改的字符串向量作为输入。所以我考虑将

vector<string_view>
作为输入。但是,如果我这样做,我就无法再将
vector<string>
作为参数传递。

示例:

#include <vector>
#include <string>
#include <string_view>

using namespace std;

void takesStringViewVectorRef(vector<string_view> const & v) {}

int main ()
{
  string_view strview; string str;
  takesStringViewVectorRef({"a", "b", strview, str}); // works, cool!

  vector<string> vec;
  takesStringViewVectorRef(vec); // doesn't work

  vector<const char *> vec2;
  takesStringViewVectorRef(vec2); // doesn't work either

  return 0;
}

这只是一个坏主意吗?我应该坚持使用

vector<string>
吗?我对此有点困惑

c++ string vector parameter-passing string-view
1个回答
0
投票

我想要一个函数,该函数将我不想修改的字符串向量作为输入。

如果您的函数打算输入您不修改的字符串向量,请将输入作为

const
引用传递,类似于您对
string_view
所做的操作:

void f(std::vector<std::string> const & v) {}

传递对

vector
的引用,无论它是
string
还是
string_view
的向量,都将具有相同的内存和时间性能。无论哪种方式,向量的内容都无法修改,因为您已将其作为
const
引用传递。如果您使用
string_view
,您将需要转换
string
的整个向量,这将花费更多时间。

© www.soinside.com 2019 - 2024. All rights reserved.