在C ++中填写列表时遇到问题。我想单位两个列出factSource和factsDest(实体的事实)。
代码如下:
Entity.h :
class Entity
{
public :
int id;
string name;
list <Fact> facts;
}
Entity.cc
void Entity::setFactsList2(list <Fact> facts) {
std::list<Fact>::iterator iterator;
for (iterator = facts.begin(); iterator != facts.end(); ++iterator) {
this->getFactsList().push_back(*iterator);
}
}
//unite two list : factsSource and facts of entity (factsDest)
void Entity::addFacts(list<Fact> factsSource, Entity *entity){
list<Fact> factsDest = entity->getFactsList();
unite(factsSource, &factsDest);
entity->setFactsList2(factsDest);
}
void Entity::unite(list<Fact> factsSource, list<Fact> * factsDest) {
std::list<Fact>::iterator iterator;
for (iterator = factsSource.begin(); iterator != factsSource.end();++iterator) {
factsDest->push_back((*iterator).getFactLiteral());
}
}
Main class :
std::list<Entity>::iterator iterator3;
for (iterator3 = targetPeers.begin(); iterator3 != targetPeers.end(); ++iterator3) {
(*iterator3).addFacts(P0.getFactsList(), &(*iterator3));
//displaying facts
list<Fact> factsTargetPeer = (*iterator3).getFactsList();
std::list<Fact>::iterator iter;
for (iter = factsTargetPeer.begin(); iter != factsTargetPeer.end(); ++iter) {
ev << (*iter).getFactLiteral().getName() <<endl; // displaying facts
}
}
问题在于显示一组事实。实际上,它只显示factsDest而不是两个列表的并集(factsSource和factsDest)。
代码中是否有错误?
提前感谢您的帮助,
答案 0 :(得分:0)
getFactsList
会返回列表的副本,因此this->getFactsList().push_back(*iterator);
每次都会添加到新列表中。
直接使用该会员:
void Entity::setFactsList2(const std::list<Fact>& newFacts) {
for (std::list<Fact>::const_iterator i = newFacts.begin(); i != newFacts.end(); ++iterator) {
facts.push_back(*i);
}
}
或
void Entity::setFactsList2(const std::list<Fact>& newFacts)
{
std::copy(newFacts.begin(), newFacts.end(), std::back_inserter(facts));
}