运行列表valuse C++eclipse

running over list valuse C++ eclipse

本文关键字:C++eclipse valuse 列表 运行      更新时间:2023-10-16

我有一个名为Movie的类,它包含指向流派的指针列表。问题是,每次我想对两部不同类型的电影进行运算符+时,我都希望它们的联合拥有不同的电影A和B。相反,它们中的一部会碾压另一部。。

class MovieIndustry {

list<Movie> movies; //list of pointers to relevant type of Workers
list<Genre> genres;
Movie final;
Genre* toAdd;
void MovieIndustry::addMoviesTogether(string allMovies) {
 std::list<Movie> moviesToAdd; //HAS MOVIES, CODE WORKS, NOT THE PROBLEM..
 int i=0;
 Movie temp;
 bool cutSpace=true;
 bool notFound=false;
 for (std::string each; std::getline(split, each, split_char);  
   tokens.push_back(each))
 {
   if(cutSpace)
   {
       each= each.substr(1);
       cutSpace=false;
   }
   int k;
   for (std::list<Movie>::iterator it2=movies.begin(); it2!= movies.end();      
       ++it2) 
                {
                   k++;
                    if( it2->getCode() == each)
                    {
                        moviesToAdd.push_back(*it2);
                    }
                    if(k==movies.size())
                    {
                        notFound=true;
                        break;   
                    }
                }//end for
  }//endfor
  if(notFound) //MEANS THERE IS NOT MOVIE WITH SUCH A CODE
   return;
   for (std::list<Movie>::iterator it2=moviesToAdd.begin(); 
   it2!=moviesToAdd.end(); ++it2) 
    {
       i++;
         if(i==1) //I don't want to overload NULL
            {
              final=*it2;
              continue;
            }
          else
           {
             temp=final;
             final =  temp + *it2;
           }
 }// end for
movies.push_back(final)
}
Movie Movie:: operator+ (const Movie& other) const{
Movie toReturn,toCheck;
Worker* toAdd,toChecking;
Genre* genreAdd,GenreChecking;
std::list<Genre*>::const_iterator checkOther;
std::list<Genre*>::const_iterator genresOfLonger;

if(length >other.getLength())
{
    toReturn=*this;
    toCheck=other;
}
else
{
    //cout<< "inside right else"<<endl;
    toReturn = other;
    toCheck = *this;
}
if(toCheck.getNumOfGenres() > 0 )
    {
        int i=0;
        int firstNum = toReturn.getNumOfGenres();
    for (checkOther=toCheck.getGenresInMovie().begin(); 
    i != toCheck.getNumOfGenres(); ++checkOther)
    {
        i++;
        int j=0;
        if(firstNum==0) //ADDED THEM ALL, BECAUSE THE FIRST HAS NO GENRES
        {
            genreAdd= (*checkOther);
            toReturn.addGenre(genreAdd);
            genreAdd = NULL;
        }
        else
        {
        for (genresOfLonger=toReturn.getGenresInMovie().begin(); j!= 
        firstNum; ++genresOfLonger)//look for it
        {
                j++;
                if( (*genresOfLonger)-> getName() == (*checkOther) -
                  >getName())
                {
                    break; //leave loop, look for next one
                }
                else
                {
                    if  ( j== firstNum) //its not here, add it
                    {
                    genreAdd= (*checkOther);
                    toReturn.addGenre(genreAdd);
                    genreAdd = NULL;
                    }
                } //end  else
        }//end for
        }//end else
    }
    }//endif
return toReturn;

这是操作员=:

Movie& Movie:: operator= (const Movie& other) {
Genre* genrePointer;
if (other.getNumOfGenres () > 0  )
{
    int k=0;
    for (std::list<Genre*>::const_iterator 
    git=other.getGenresInMovie().begin();k!= other.getNumOfGenres(); ++git)
            {
                    k++;
                    genrePointer= (*git);
                    this->addGenre(genrePointer);
                    genrePointer=NULL;
                }
 }
return *this;

我的复制构造函数简单地说:

Movie::Movie(const Movie& toCopy) {
 *this=toCopy;
 }

在检测它的时候,我发现当我把参数b发送给运算符+时,它也已经有了A和b的基因。。我不明白

正如我提到的,问题是,说电影A有科幻,电影B有动作,如果我想把它们添加到电影决赛=A+B,决赛得到类型"动作,动作"。我很确定问题出在这个循环中,因为当我从不同的函数发送给运算符+和运算符=时,一切都如预期的那样。。帮助。。?

我的想法和tobi一样,直到我看到//HAS MOVIES, CODE WORKS, NOT THE PROBLEM..

如果事先对两个流派列表进行排序,则可以使用set_union。