关于输出迭代器和集合的问题很多,但都没有解决这个特定主题。
我编写了一个将对象序列反序列化到容器的函数。我希望此功能尽可能通用,因此容器可以是集合或向量。
我正在考虑接收一个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
非常感谢您。
答案 0 :(得分:2)
您可以使用std::insert_iterator
(可能与std::inserter
一起使用)
void deserializeToSet(set<int> &setContainer){
deserializeToContainer(std::inserter(setContainer, setContainer.end()));
}