C ++:基于构造函数参数初始化向量

时间:2012-08-30 19:57:05

标签: c++ vector

对于两个问题相继抱歉。

我想声明一个Object的向量作为实例数据,然后在构造函数中初始化它的大小,如下所示:

  class Test
    {
    private:
        std::vector<Object_I_madeup> myVector;
        int n;
    public:
         Test(int n):
           n(n)
        {
            myVector(n); //Intending to set the size of the vector to n entries
        }

我试图找到一个Java的.setSize(),并怀疑我应该使用resize()。我知道这是一个简单的问题 - 但最好的方法是什么?

由于

3 个答案:

答案 0 :(得分:3)

将其添加到初始值设定项:

Test (int n):
    myVector(n), n(n) {}

请注意,它应放在n之前,因为成员按照它们在您的课程中出现的顺序进行初始化。同样,如果您的n成员所做的一切都是跟踪向量的大小,那么您也可以使用myVector.size()代替。对于无效值,您也应该更加严格,因为在这里,有人可以通过-5或类似的东西,你不会阻止它们。我意识到这是一个测试,但实现无符号参数会更好。正如Ed指出的那样,使用size_t是您的最佳选择,因为它相当于向量使用的大小(std::vector<T>::size_type)。

答案 1 :(得分:0)

使用成员初始值设定项列表,就像您对n所做的那样。由于向量知道其大小,您甚至不需要存储n。您可以在需要时使用myVector.size()

class Test
{
private:
    std::vector<Object_I_madeup> myVector;
public:
     Test(int n):
       myVector(n) {}
};

答案 2 :(得分:0)

为什么要单独构建尺寸?矢量总能告诉你它有多少元素;存储该信息是多余的。您应该在初始化列表中初始化它:

class Test {
public:
    Test(size_t size) : myVector(size) { }
private:
    std::vector<Object_I_madeup> myVector;
};

请注意,通过使用int,您可以人为地限制向量的上限。