我需要构建一种堆栈,在其中可以将值压入顶部:
5 // (size 1)
5 3 // (size 2)
5 3 8 // (size 3)
而不是按值删除它们,例如删除3:
5 8 // (size 2)
比在需要时总是能够获得最后一个值(即示例中的8)。
我最多可以推送32个值,所以我知道整体大小(避免堆?)。>
我认为std::vector
带有:
但是也许有一些stl容器更适合这种过程?不确定vector是否始终在堆栈中,并且会在后台进行进一步的内存重新分配...
我需要构建一种堆栈,在其中我可以将值压入顶部:5 //(大小1)5 3 //(大小2)5 3 8 // //(大小3)而不是按值删除它们,例如删除3:5 8 //(大小2)比...
您可以编写一个包含32个值的分配器,并拒绝分配32
以外的任何金额>
template <typename T, std::size_t N = 32>
struct static_allocator
{
T* allocate(std::size_t n) { if (n != N) throw std::bad_alloc(); return arr; }
void deallocate(T *, std::size_t) {}
using pointer = T*;
using const_pointer = const T*;
using void_pointer = void*;
using const_void_pointer = const void*;
using value_type = T;
using size_type = std::size_t;
using difference_type = std::ptrdiff_t;
template <typename U>
struct rebind
{
using other = static_allocator<U, N>;
};
static_allocator select_on_container_copy_construction() { return {}; }
using propagate_on_container_copy_assignment = std::true_type;
using propagate_on_container_move_assignment = std::true_type;
using propagate_on_container_swap = std::true_type;
private:
T arr[N];
};
如果您不希望重新分配内存,则也可以使用列表容器,即链表..,因为它与矢量具有几乎相同的属性。只是不支持随机访问或[]运算符...其他矢量很完美: )