我目前正在使用c ++中的对象数组。我有一个Book对象数组,里面填充了数据文件中的数据,我需要循环遍历Book对象数组并打印每个包含book数据的元素,每行一个。当我打印出来时,列表中的项目为“空”,没有标题,没有ISBN,价格为0,数量为0.如何才能将其打印出包含数据的元素?< / p>
答案 0 :(得分:0)
您可以使用基于范围的for
循环并检查书对象是否为空:
Book books[255];
// or
std::vector<Book> books;
for(const auto& book : books) {
if(!book.isEmpty()) {
std::cout << book.print() << std::endl;
}
}
正如@Barmar所说,如果你使用std::vector
并且只知道它不是一个空对象时只添加一个新的Book
会更好 - 那么你有一个有效的书籍容器你可以放弃isEmpty()
支票。
如果你的Book
对象没有一种非常直接的内部方式来知道它是否为空,而不是在界面中添加isEmpty()
成员函数,那么最好有一个非会员非朋友便利功能,以检查图书是否为空:
class Book {
public:
std::string title() const;
std::string author() const;
std::string isbn() const;
// simpler is better... it's already getting cluttered...
...
};
// you don't need to be a member of Book to know if a Book is empty!
bool isEmpty(const Book& book) {
return book.title().empty() && book.author().empty() && book.isbn().empty();
}
(这是一个人为的例子 - 如果一本书的标题为空,可以合理地假设一本书是空的。)
for(const auto& book : books) {
if(!isEmpty(book)) {
std::cout << book.print() << std::endl;
}
}
更高级的技术是将isEmpty(Book)
便利函数放入与Book
对象相同的名称空间中。但这对小型项目来说并不重要。
(98%的帖子来自Scott Meyer的Effective C ++ 3rd Edition,ISBN 0-321-33487-6,价格£n / a,数量1)