使用有状态分配器连续清理、填充和交换 2 个容器

问题描述

我有 2 个容器(在 value_type 方面相同)并像这样使用它们:

void use(const container& c1,const container& c2);
void fill(container& c);

container current(/* potential alloc/memory resource arg */);
container prev(/* potential alloc/memory resource arg */);

while (/* ... */) {
    std::swap(current,prev);
    current.clear();
    fill(current);
    use(current,prev);
}

fill 函数从不擦除元素,只在其执行期间插入,所以我认为如果我可以使用单调分配器(又名指针碰撞分配器)来优化循环内发生的整个任务会非常好.

我的问题是:

  • 分配器是否应该在复制/移动/交换时传播?
  • 应该有 2 个内存资源还是 1 个?
  • 是否可以实现这样的分配器:
    • 2 个容器的交换将是 O(1)
    • 两个容器在被清除后都会重用内存
  • 如果可能,我应该:
    • 编写我自己的分配器类型
    • 编写自己的内存资源并使用std::polymorphic_allocator(其中虚函数的成本对于单调资源来说相对较高)
  • 如果不可能,如果循环编写不同,是否可以实现?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)