【问题标题】:Move string into vector将字符串移动到向量中
【发布时间】:2012-03-31 16:54:44
【问题描述】:

有没有办法将 std::string 中的内容移动到 std::vector 中?我认为现在在语言中有右值引用,这个操作有时会非常有用。

【问题讨论】:

  • “移动”是什么意思?
  • 嗯.. 移动?移动而不复制。 my_vec = std::move(my_string); (显然不起作用)
  • 我不知道一种真正能“移动”的语言。您可以复制然后删除/取消源
  • @stefanbachert:那你需要多看看C++11。
  • 在内部,字符串可能与向量不同,因此您建议的那种 C++11 风格的移动可能是不可能的。

标签: c++ string vector c++11


【解决方案1】:

理论上可以从一种对象类型移动到另一种对象类型。但是,必须将这些对象类型设计为允许这样做。 vectorstring 不是。

如果std::vector 有一个接受std::string&& 的构造函数,那么对象允许的一个很好的线索是。它没有这样的构造函数。此外,vector 必须成为 string 的朋友才能了解其内部结构。

【讨论】:

  • 嗯,这令人失望。没有办法告诉字符串“嘿,我需要这个,请不要删除”?
  • @cooky451: 好吧,考虑到很多strings 实现了小字符串优化(意味着一定长度以下的字符串不是堆分配的),那将是不可能 i> 做。你不能告诉string“请不要删除”它没有分配的东西。另外,请注意,它们可以使用不同的分配器进行分配(尽管这可能是移动的要求,很像 list::splice)。有good reasons why string and vector are two different types
  • 好的,我没有考虑小字符串优化。好吧,我想我只需要复制它。
猜你喜欢
  • 2020-07-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 2015-07-20
  • 2016-10-22
  • 2020-01-07
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多