声明带有类项的向量

时间:2012-10-31 21:16:23

标签: c++ class vector

如何声明一个包含类中所有元素的向量?例如:

class Book{
    string name;
    int published;
    float price;
}

矢量是在类中还是仅在主函数中?将其声明为vector<Book *> a; 你怎么能在这个载体中添加这些名字?如果您有多本书,您必须声明一个新的向量吗?

2 个答案:

答案 0 :(得分:1)

我不确定你在问什么。如果你想要一个图书矢量,那么vector<Book>就可以了。在这个时候,我建议不要使用指针,因为这会引入一些其他复杂性。向量中的每本书都包含您声明它们的元素。

向量是跟踪多本书的一种方式。如果您需要两个列表的书籍来跟踪(例如,一个向量是非小说类书籍列表,另一个是小说书籍列表),您只需要声明另一个向量。

声明向量的位置取决于您希望如何使用它。首先,您可能希望在main中声明它以测试它是否有效。如果您以后想要创建Library类,那么您很可能会在该类中声明vector<Book>

答案 1 :(得分:0)

  

矢量是在一个类中还是只在一个主函数中?

没有多大意义。 std :: vector是一个类容器,可以在其中包含多个元素(所有相同的类型)。

  

将其声明为vector<Book *> a

请注意,这样就可以声明指向类的指针向量。

  

你怎么能在这个载体中添加这些名字?

您可以使用std::vector::push_back在向量的末尾插入元素。

  

如果您有多本书,您必须申报新书   矢量?

嗯,这正是使用像vector这样的容器的原因,它拥有多个元素。拥有更多的载体是没有意义的。

  

如何使用向量访问数据呢?就像你   想要改变特定书籍的价格

为了简单起见,您可以使用括号来访问给定索引处的向量元素。在C ++类中,默认情况下,成员是私有的,如果你没有明确地公开它们。因此,避免进一步的解释(参见getter / setter以获得最终更好的设计),方法可能如下:

class Book{

    public:

    string name;
    int published;
    float price;

    Book (string iName, int iPublished, float iPrice)
    {
        name = iName;
        published = iPublished;
        price = iPrice;
    }
}

std::vector<Book*> bookList = std::vector();
bookList.push_back(new Book("foo", 10, 100.0f));
bookList.push_back(new Book("bar", 11, 110.0f));

std::cout << bookList[1].name; // print bar