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
类中的指针重新创建双向链接列表。这似乎有点浪费精力,但是如果需要,您有两种选择。
您可以在循环中使用额外的迭代器来指向“最后一本书”:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句