有人可以告诉我C ++ / STL中是否有一种数据类型,它可以让我轻松地解决以下问题:
现在我想要的是某种包装器类,可以帮助我在该区域中插入新元素。它应该具有某种“附加”功能,基本上可以完成以下操作
我可以自己编写类似的内容,但我想先问一下C ++ STL中是否有一个类可以让我更优雅地解决此问题。
感谢您的帮助。
答案 0 :(得分:3)
在C ++ 17中,多态分配器有一个方便的功能。更具体地说,这就是您想要的:
pluginManagement {
repositories { ... }
}
答案 1 :(得分:0)
您需要编写一个Allocator来从数组中分发T
,然后std::vector
才能使用它。
template <typename T>
class ArrayAllocator
{
T* current;
T* end;
public:
using value_type = T;
ArrayAllocator(T* start, T* end) : current(start), end(end) {}
T* allocate(size_t n)
{
if (current + n >= end) throw std::bad_alloc();
T * result = current;
current += n;
return result;
}
void deallocate(T* what, size_t n)
{
if (what + n != current) throw std::runtime_error("bad deallocate");
current = what;
}
size_t max_size() { return end - current; }
};
您必须立即reserve
全部金额,因为vector
重新分配时需要将旧值复制到新空间中,这将导致“不良分配”。
答案 2 :(得分:0)
我最终编写了一个AppendHelper类,该类带有开始和结束指针,否则将重现std :: vector接口。我意识到,使用带有自定义分配器的std :: vector意味着无法完全控制何时执行分配和释放,因此结果的行为可能与我的初衷不同。