gpt4 book ai didi

c++ - 决定在运行时使用boost::static_vector或std::vector

转载 作者:行者123 更新时间:2023-12-03 07:15:38 24 4
gpt4 key购买 nike

我有一个想要最小化动态分配以提高效率的应用程序。
因此,我倾向于在我的一个类中使用boost::static_vector。我不确定要适应大多数情况我的阵列到底需要多大,但是总是有异常(exception)...
我不想丢弃需要比我的static_vector可以存储的空间更多的空间的输入,而是想依靠std::vector来处理这些异常。
我通常在类设计中使用的一种模式是,将其输入提供给构造函数以填充其容器,然后提供一种getter函数,该函数将const引用返回到内部容器。
类(class)可能使用一个或另一个容器的可能性在我体内造成了精神盲点。
提供对类元素的访问的最佳方法是什么?
我提出的想法很少,但没有一个是真正令人满意的。

  • 使用代理/外观模式使我的类(class)成为容器
    我太懒了,如果我想在所有地方都应用static_vector / vector解决方案,这是不切实际的...
  • 给类(class)用户带来负担
    即。
  • void foo(HybridContainerObj &ojb) {
    if (obj.IsUsingStaticVector()) {
    const boost::static_vector<SomeElem> &vRef = obj.getStaticVec();
    }
    else {
    const std::vector<SomeElem> &vRef = obj.getVec();
    }
    }
    我觉得我不对...
  • 修改boost::static_vector以完全按照我的想法做

  • 到目前为止,这是我最喜欢的解决方案...
  • 使用一些我不知道
  • 的C++魔术

    由于这两个容器类确实实现了相同的STL容器概念,所以我希望有可能做到这一点: const auto &vecRef = obj.getVec();但是AFAIK,这不可能...对吗?
    所以,我在这里看看别人对这个问题的看法,以及是否有人会提出一个优雅的建议,向用户展示该类使用的容器元素...
    问候

    最佳答案

    boost::small_vector可能是您要寻找的组合。从https://www.boost.org/doc/libs/1_60_0/doc/html/boost/container/small_vector.html:

    small_vector is a vector-like container optimized for the case when itcontains few elements. It contains some preallocated elementsin-place, which can avoid the use of dynamic storage allocation whenthe actual number of elements is below that preallocated threshold.

    关于c++ - 决定在运行时使用boost::static_vector或std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64516180/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com