gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:44:47 25 4
gpt4 key购买 nike

list<Book>::iterator pos;
pos = books.begin();

books.begin()->setPrevBook(NULL);

for (pos = books.begin(); pos != books.end(); pos++)
{
cout << book.getTitle() << "\n"
<< book.getAuthor() << "\n"
<< book.getISBN() << "\n"

//I'd like to set the next and previous books here
//<< book.setNextBook()
//<<book.setPrevBook()
<< "******************************" << endl;
}

这是我的书籍迭代器,我的程序会执行循环,直到用户告诉它停止,然后它会打印出所有书籍。

我的书也有这个代码

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;
}

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

我有办法做到这一点吗?

感谢任何帮助。

最佳答案

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

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

    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);
  2. 使用指向上一本书的指针而不是迭代器:

    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);

关于c++ - 在列表迭代器中设置下一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20161962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com