集合上的输出迭代器:分配并递增迭代器

时间:2018-11-02 14:43:40

标签: c++ iterator set stdvector

关于输出迭代器和集合的问题很多,但都没有解决这个特定主题。

我编写了一个将对象序列反序列化到容器的函数。我希望此功能尽可能通用,因此容器可以是集合或向量。

我正在考虑接收一个OutputIterator作为参数,将每个新对象反序列化后放在哪里。如果容器是一个集合,我不确定在写迭代器时会发生什么。

为简单起见,假设此示例中的容器保存int而不是指向对象的指针,这些对象由getIntFromInput()逐一返回。

void deserializeToContainer(OutputIterator oit){
  while(moreInputAvailable()){
    *oit = getIntFromInput();
    oit++;
  }
}

void deserializeToVector(vector<int> &vectorContainer){
  deserializeToContainer(vectorContainer.back_inserter());
}

void deserializeToSet(set<int> &setContainer){
  deserializeToContainer(setContainer.end());
}

由于集合没有back_inserter,并且元素没有按照插入的顺序存储,所以我想知道当容器为集合时,*oit分配和oit递增的期望是什么,就像在deserializeToSet

中一样

非常感谢您。

1 个答案:

答案 0 :(得分:2)

您可以使用std::insert_iterator(可能与std::inserter一起使用)

void deserializeToSet(set<int> &setContainer){
  deserializeToContainer(std::inserter(setContainer, setContainer.end()));
}