示例代码中的范围问题,使用分隔符将字符串的std :: string拆分为std :: vector

托哈兹

在搜索代码片段以使用''(a Space :)的分隔符将std :: string拆分为子字符串向量时发现了这个代码示例字符串示例-“一二三”。

std::vector<std::string> split(const std::string& s, char delimiter)
{
   std::vector<std::string> tokens;
   std::string token;
   std::istringstream tokenStream(s);
   while (std::getline(tokenStream, token, delimiter))
   {
      tokens.push_back(token);
   }
   return tokens;
}

我的问题是变量“令牌”的范围。使用这样的分割函数会不会出错,因为一旦函数返回,局部变量的作用域就会结束。我有一个解决问题的想法,只是不确定我的c ++技能。我对使用C ++ 0x的标准(例如explode(string,delimiter))的使用方式感到好奇。

克里斯多夫

tokens变量确实将无法生存函数的返回。但是返回是按值返回的,返回的值在调用上下文中仍然存在。

对于优化,最好的办法是让编译器执行其工作,并且仅在必要时进行微调。在这里,编译器可能会生成:

1)复制省略,将返回值直接构造到其目标中。示例:auto r=split(s, ' ');
2)如果目标已经预先构建,则进行移动分配。例:
r=split(s, ' ');

两种情况都避免了不必要的数据复制。您可以在这里看一下该Test课程以进行理解

通过引用返回将是UB,因为引用将引用不再存在的变量。因此,按引用返回将意味着使用引用参数直接写入正确的目标变量。但这不会胜过复制省略。而且它可能很少会胜过移动任务。但是如果有疑问,可以尝试进行基准测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将十六进制字符串拆分为std :: vector?

将大小为 m 的 std::vector 拆分为大小为 n 的向量的向量

在第n个分隔符处将字符串拆分为JavaScript中的数组

使用整数作为分隔符将字符串拆分为数组

如何使用多个分隔符作为键将字符串拆分为字典

如何将std :: string拆分为std :: string_views的范围(v3)?

使用分隔符 - 、(逗号)和双引号将字符串拆分为 java 中的每个值

std :: vector中的字符串验证

计算std :: string的已分配内存(以及std :: vector中字符串的使用)

将std :: vector <std :: vector <std :: string >>转换为std :: vector <std :: vector <double >>

Regex。使用分隔符将字符串拆分为子字符串,同时保留空白

使用分隔符将Java字符串拆分为两个字符串

将字符串拆分为数组,在Swift中保留定界符/分隔符

将一串字符串拆分为 2 个分隔符

将字符串拆分为单词和分隔符列表

将具有分隔符的字符串拆分为 3 个变量

将没有分隔符的字符串拆分为列

如何根据多次重复的分隔符类型将字符串拆分为多列?

如何根据分隔符将字符串拆分为 2 个不同的变量?

根据最后出现的分隔符将字符串拆分为2

根据最后出现的分隔符将字符串拆分为2

将字符串拆分为多列,无需分隔符 bigquery

根据分隔符字符串将列拆分为单独的列

Java:通过分隔符将字符串拆分为哈希表

将一个字符串在 r 中的多个分隔符处拆分为多行

SQL Server:如何使用2个分隔符将字符串拆分为列和行?

如何在Ruby中使用空行作为分隔符将字符串拆分为数组?

将字符串拆分为单词,然后使用原始的分隔符将它们连接起来

如何将Vector拆分为列-使用PySpark