【问题标题】:Can I have a vector that shares storage with another vector? [duplicate]我可以有一个与另一个向量共享存储的向量吗? [复制]
【发布时间】:2019-11-13 14:36:44
【问题描述】:

在我的应用程序的结构中,一个对象的向量是另一个向量的子集是有意义的。我的意思是,较小的存储包含在较大的存储中。

这在 C++ 中可行吗?我保证这两个向量都不会被调整大小,而且我可能会做到这一点,以便子向量在包含的向量之前被破坏。

起初我认为从迭代器创建一个子向量到大向量中可以解决问题,但这样会产生副本。我真的想要一个裸指针的重定向。

【问题讨论】:

  • 您的子集是否连续,即v[i]v[j] 以及介于两者之间的所有元素;或均匀跨步,例如原始向量的每三个元素;还是更一般的东西?
  • 连续。真的,这是最无害和最安全的情况。我会调查gsl::span,这对我来说是新的。

标签: c++ stdvector


【解决方案1】:

总之,没有。 std::vector 只是不这样做。但是你可以做两件类似的事情:

  1. 一个指针向量(可能是std::shared_ptr),这样一个 向量指向另一个元素。当然,现在你有一个指向对象的指针向量,而不是对象,这可能是个问题。一种可能的想法是std::reference_wrapper,但这不是很好。

  2. 还有std::span,就是为此用例而生的。

【讨论】:

  • 谢谢。跨度对我来说是新的。我会调查的。
  • @VictorEijkhout 这是旧想法的新名称。享受吧。
  • 一句话:是的,使用适当的分配器。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2021-01-23
相关资源
最近更新 更多