相关疑难解决方法(0)

容器固定动态尺寸

是否有一个固定长度序列的标准容器,其长度在运行时确定.我想将参数传递给每个sequence元素的构造函数,并使用该参数初始化const成员(或引用).我还想在O(1)中的给定索引处获得序列元素.在我看来,我的所有要求都无法同时满足.

  • 我知道std::array有固定长度,但必须在编译时知道该长度.
  • std::vector具有动态大小,并允许使用传递构造函数参数emplace.虽然你可以reserve记忆以避免实际的重新分配,但是类型仍然必须是可移动的,理论上允许这样的重新分配,例如防止const成员.
  • 然后有,std::list并且std::forward_list,它不需要可移动类型,但仍然可调整大小并且在随机访问模式下将表现得相当差.我还认为这些列表可能会产生相当大的开销,因为每个列表节点可能会单独分配.
  • 奇怪的是,std::valarray到目前为止,这是我最好的选择,因为它有一个固定的长度,不会自动调整大小.虽然有一种resize方法,但除非您实际调用该方法,否则您的类型不必是可移动的.这里的主要缺点是缺少自定义构造函数参数,因此使用此方法无法初始化const成员.

我错过了一些替代方案吗?有没有办法调整其中一个标准容器,以满足我的所有要求?


编辑:为了让您更准确地了解我正在尝试做什么,请参阅此示例:

class A {
  void foo(unsigned n);
};

class B {
private:
  A* const a;
  const unsigned i;
public:
  B(A* aa) : a(aa), i(0) { }
  B(A* aa, unsigned ii) : a(aa), i(ii) { }
  B(const std::pair<A*, unsigned>& args) : B(args.first, args.second) { }
  B(const B&) = delete;
  B(B&&) = delete;
  B& operator=(const B&) = delete; …
Run Code Online (Sandbox Code Playgroud)

c++ containers std sequence c++11

30
推荐指数
2
解决办法
2246
查看次数

标签 统计

c++ ×1

c++11 ×1

containers ×1

sequence ×1

std ×1