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