gpt4 book ai didi

c++ - 我如何最好地对 N 值的(一维) vector 进行强制展平?

转载 作者:行者123 更新时间:2023-12-01 14:53:19 28 4
gpt4 key购买 nike

我需要一些行为类似于 std::vector 的东西(界面/功能/等)但我需要它是平坦的,即它不能动态分配缓冲区。显然,这通常不起作用,因为可用大小必须在编译时确定。但我希望类型能够处理N没有额外分配的对象,以及 仅当推送更多项目时 采用动态分配。
std::vector 的一些实现已经这样做了,但仅在内容的累积大小适合的情况下使用其现有成员(我相信大约三个指针的有效负载值(value))。所以,首先 ,这不是保证和其次它在编译时不可配置。

我的想法是我可以

  • 一) self-cook a type(可能很糟糕,因为我会从 vector 中放弃可笑的性能优化)
  • B) 使用某种 variant<vector<T>,array<T,N>>带有访问包装器(哦,样板)
  • C) 想出一个MyAllocator<T,N>有一个 array<T,N>然后可用于保存第一个 N 的成员项目,在此之后推迟到 allocator<T>但我不确定这是否可行,因为我无法确定 vector必须永久持有其分配器类型的实例作为成员(我相信它不会)

  • 我想我不是第一个想要这个的人,所以也许已经有办法了?一些经验值,或者甚至是免费的图书馆?

    最佳答案

    您可能会发现 folly/small_vector使用。

    folly::small_vector is a sequence container that implements small buffer optimization. It behaves similarly to std::vector, except until a certain number of elements are reserved it does not use the heap.

    Like standard vector, it is guaranteed to use contiguous memory. (So, after it spills to the heap all the elements live in the heap buffer.)



    简单的使用示例:
    small_vector<int,2> vec;
    vec.push_back(0); // Stored in-place on stack
    vec.push_back(1); // Still on the stack
    vec.push_back(2); // Switches to heap buffer.

    // With space for 32 in situ unique pointers, and only using a
    // 4-byte size_type.
    small_vector<std::unique_ptr<int>, 32, uint32_t> v;

    // A inline vector of up to 256 ints which will not use the heap.
    small_vector<int, 256, NoHeap> v;

    // Same as the above, but making the size_type smaller too.
    small_vector<int, 256, NoHeap, uint16_t> v;

    关于c++ - 我如何最好地对 N 值的(一维) vector 进行强制展平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763376/

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