如何在 C++ 中使用 for 循环输出向量中的所有对象

Posted

技术标签:

【中文标题】如何在 C++ 中使用 for 循环输出向量中的所有对象【英文标题】:How can I output all objects in a vector using for loop in c++ 【发布时间】:2020-06-03 02:03:10 【问题描述】:

BookLibrary 类构造BookInfo 类对象的向量。任务是将一些“书籍”(BookInfo 类的对象)添加到向量中并打印出来。出于某种原因,传统的for(unsigned int i = 0; i < vector.size(); i++) cout << vector[i] << endl; 循环不起作用。这是 Savitch 教科书“用 C++ 解决问题”中的一个家庭作业项目。

代码如下:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class BookInfo

public:
    BookInfo(string newAuthor, string newTitle);
    BookInfo(string newTitle);
    string getName();
    string getAuthor();
    string getTitle();
private:
    string author;
    string title;
;

class BookLibrary

public:
    BookLibrary();
    BookLibrary(vector<BookInfo> newLibrary);
    void add(BookInfo newBook);
    void size();
    void printInfo();
private:
    vector<BookInfo> library;
;

int main()

    BookLibrary library1;
    BookInfo book1("Michael Krichton", "Jurassic Park");
    BookInfo book2("War and Peace"), book3("Valter Savitch", "Programming in C++");
    library1.add(book1);
    library1.add(book2);
    library1.add(book3);
    library1.size();
    library1.printInfo();
    return 0;


BookInfo::BookInfo(string newAuthor, string newTitle)

    author = newAuthor;
    title = newTitle;


BookInfo::BookInfo(string newTitle) :
    title(newTitle), author("unknown")


string BookInfo::getName()

    return (author + " " + title);


string BookInfo::getAuthor()

    return author;


string BookInfo::getTitle()

    return title;


BookLibrary::BookLibrary()


BookLibrary::BookLibrary(vector<BookInfo> newLibrary)

    library = newLibrary;


void BookLibrary::add(BookInfo newBook)

    library.push_back(newBook);


void BookLibrary::size()

    cout << library.size();


void BookLibrary::printInfo()

    for (unsigned int i = 0; i < library.size(); i++)
        cout << library[i] << endl;

它在最后一行的cout &lt;&lt; 下划线。

【问题讨论】:

BookInfo需要提供operator&lt;&lt; “不工作”不是一个有用的问题描述。这就像通过说“我的车不动”来向机械师解释您的汽车问题。 编译器 'complains': "error C2679: binary ' @kanulilewa 正如cigien所说,您需要为BookInfo定义一个operator&lt;&lt; 我不确定我是否熟悉这个,我该如何定义它? 【参考方案1】:

您的循环无法打印出BookInfo 对象,因为您尚未为BookInfo 定义operator&lt;&lt;。因此,像cout &lt;&lt; library[i] 这样的语句不知道如何处理library[i] 返回的BookInfo

你需要添加那个操作符,例如:

class BookInfo

public:
    ...

    friend ostream& operator<<(ostream &os, const BookInfo &book)
    
        os << "\"" << book.title << "\" by " << book.author;
        return os;
    

    ...
;

如果您想改用 getName() 方法,则需要将其声明为 const(无论如何您都应该为所有的 getter 这样做),例如:

class BookInfo

public:
    ...
    string getName() const;
    ...

    friend ostream& operator<<(ostream &os, const BookInfo &book)
    
        os << book.getName();
        return os;
    

    ...
;

string BookInfo::getName() const

    return ...;

【讨论】:

非常感谢,这对我来说是新的,我会尝试将其添加到我的代码中 效果很好!!!这是更新后的代码: class BookInfo public: BookInfo(string newAuthor, string newTitle); BookInfo(string newTitle);字符串 getName() 常量;字符串 getAuthor();字符串 getTitle();朋友 ostream& operator 这个主题叫ostream吗?我想对这件事做更多的研究,因为这对我来说是新的

以上是关于如何在 C++ 中使用 for 循环输出向量中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章

for 循环中的向量迭代器、返回语句、警告、c++

在for循环C ++之外访问向量[关闭]

C++ - 在 FOR 循环中从向量获取大小

如何通过使用for循环c ++放入另一个向量来组织一个向量

为啥需要两个范围 for 循环来更改 C++ 中向量的这些元素?

c++ 在 for 循环中的 vector<char> 中的 for 循环中的内存分配