C ++:无法显示列表中添加的元素

时间:2015-02-05 09:57:41

标签: c++

在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)。

代码中是否有错误?

提前感谢您的帮助,

1 个答案:

答案 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));
}