C 打印元素,带有来自对象数组的数据
C++ print elements with data from object array
我当前正在使用C 中的对象数组。我有一个填充来自数据文件的数据的书籍对象数组,我需要循环遍历一系列的书籍对象,并打印每个包含书籍数据的元素,每行。当我将其打印出来时,列表中的项目"空"没有标题,没有ISBN,价格为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()
成员函数添加到接口中,则最好拥有 non-Member non-Member non-Friend 便利功能以检查本书是否为空:
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)有效的C 第三版中反省的,ISBN 0-321-33487-6,价格£n/a,数量1)
相关文章:
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组