Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在列表迭代器中设置下一个对象_C++_List_Loops - Fatal编程技术网

C++ 在列表迭代器中设置下一个对象

C++ 在列表迭代器中设置下一个对象,c++,list,loops,C++,List,Loops,我想在列表迭代器中做的是,当它完成添加一本新书时,将下一本书添加到即将添加的书中,将上一本书添加到刚刚添加的书中。基本上,我想把所有的书联系在一起 我有办法做到这一点吗 感谢您的帮助。您呢 void Book::setNextBook(Book* nextBookParam) { nextBook = nextBookParam; } Book* Book::getNextBook() const { return nextBook; } void Book::setPrev

我想在列表迭代器中做的是,当它完成添加一本新书时,将下一本书添加到即将添加的书中,将上一本书添加到刚刚添加的书中。基本上,我想把所有的书联系在一起

我有办法做到这一点吗

感谢您的帮助。

您呢

void Book::setNextBook(Book* nextBookParam)
{
    nextBook = nextBookParam;
}

Book* Book::getNextBook() const
{
    return nextBook;
}

void Book::setPrevBook(Book* prevBookParam)
{
    prevBook = prevBookParam;
}

Book* Book::getPrevBook() const
{
    return prevBook;
}
那怎么办

void Book::setNextBook(Book* nextBookParam)
{
    nextBook = nextBookParam;
}

Book* Book::getNextBook() const
{
    return nextBook;
}

void Book::setPrevBook(Book* prevBookParam)
{
    prevBook = prevBookParam;
}

Book* Book::getPrevBook() const
{
    return prevBook;
}

如果我理解正确,您正在尝试使用存储在
Book
类中的指针重新创建双链接列表
Book
。这似乎有点浪费精力,但如果你需要,你有两个选择

  • 您可以在循环中使用额外的迭代器来指向“最后一本”书:

    list::迭代器位置,最后;
    books.begin()->setPrevBook(空);
    for(pos=books.begin();pos!=books.end();++pos)
    {
    
    cout getTitle()如果我理解正确,您正在尝试使用
    Book
    类中存储的指针重新创建双链接列表
    Book
    。这似乎有点浪费精力,但如果需要,您有两个选择

  • 您可以在循环中使用额外的迭代器来指向“最后一本”书:

    list::迭代器位置,最后;
    books.begin()->setPrevBook(空);
    for(pos=books.begin();pos!=books.end();++pos)
    {
    
    coutgettitle()
    pos
    book
    之间的关系是什么?当你说
    book
    时,你不是指
    *pos
    吗?我希望我的迭代器pos将对象存储在一个图书列表中。我不太确定你所说的*pos是什么意思。你能详细说明一下吗?你现在展示的是一个现有的图书列表和p把它们全部打印出来。没有“用户告诉停止”你是在问如何从用户输入中创建列表吗?如果是的话,这个问题完全不清楚。我有上面的用户输入。我一直要求用户输入书籍的详细信息,直到我按q,然后它进入我问题中的代码块,所以我已经创建了书籍,我只是想让列表迭代器链接所有的t他一起看书。例如,当我调试并添加两本书时,调试器显示第二本书的前一本书为=NULL,我希望它显示前一本书为=book1 etcI我尝试过写一个答案,但你的问题仍然不清楚。也许你可以发布更多的代码?pos
    之间的关系是什么de>book
  • ?当你说
    book
    时,你不是指
    *pos
    ?我希望我的迭代器pos将对象存储在图书列表中。我不太确定你所说的*pos是什么意思。你能详细说明一下吗?你现在展示的是在现有图书列表上循环并将它们全部打印出来。没有“用户告诉停止”你是在问如何从用户输入中创建列表吗?如果是的话,这个问题完全不清楚。我有上面的用户输入。我一直要求用户输入书籍的详细信息,直到我按q,然后它进入我问题中的代码块,所以我已经创建了书籍,我只是想让列表迭代器链接所有的t他一起看书。例如,当我调试并添加两本书时,调试器显示第二本书的前一本书为=NULL,我希望它显示前一本书为=book1 etcI。我尝试过写一个答案,但你的问题仍然很不清楚。也许你可以发布更多代码?
    auto book = books->begin();
    book ->setPreviousBook(NULL);
    auto prev = book;
    ++book;
    while(book != books->end()) {
        book->setPreviousBook(&*prev);
        prev->setNextBook(&*book);
        ++book;
        ++prev;
    }
    
    prev->setNextBook(NULL);
    
    list<Book>::iterator pos, last;
    books.begin()->setPrevBook(NULL);
    for (pos = books.begin(); pos != books.end(); ++pos)
    {
        cout << pos->getTitle() << "\n"
            << pos->getAuthor() << "\n"
            << pos->getISBN() << "\n"
            << "******************************" << endl;
        if (pos != books.begin())
        {
          last->setNextBook(&*pos);
          pos->setPrevBook(&*last);
        }
        last = pos;
    }
    books.back().setNextBook(NULL);
    
    list<Book>::iterator pos;
    books.begin()->setPrevBook(NULL);
    Book *last = NULL;
    for (pos = books.begin(); pos != books.end(); ++pos)
    {
        cout << pos->getTitle() << "\n"
            << pos->getAuthor() << "\n"
            << pos->getISBN() << "\n"
            << "******************************" << endl;
        if (last)
        {
          last->setNextBook(&*pos);
          pos->setPrevBook(last);
        }
        last = &*pos;
    }
    books.back().setNextBook(NULL);