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

C++ : Initializing vector based on constructor param

本文关键字:参数 初始化 向量 构造函数 C++      更新时间:2023-10-16

很抱歉连续问了两个问题。

我想将对象的向量声明为实例数据,然后在构造函数中初始化其大小,例如:

  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()。我知道这是一个简单的问题,但最好的方法是什么?

感谢

将其添加到初始化程序中:

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

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

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

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

为什么要单独构建大小?向量总是可以告诉你它有多少元素;存储该信息是多余的。您应该在初始化列表中对其进行初始化:

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

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