STD ::数组的初始大小在使用它的类的构造函数中

Initialise size of std::array in a constructor of the class that uses it

本文关键字:构造函数 数组 STD      更新时间:2023-10-16

是否可以将std::array<class T, std::size_t N>用作类的私人属性,但是在类的构造函数中初始化其大小?

class Router{
    std::array<Port,???> ports; //I dont know how much ports do will this have
public:
    Switch(int numberOfPortsOnRouter){
        ports=std::array<Port,numberOfPortsOnRouter> ports; //now I know it has "numberOfPortsOnRouter" ports, but howto tell the "ports" variable?
    }
}

我可能会使用指针,但是如果没有它?

您必须使您的类Router成为模板类

template<std::size_t N> 
class Router{
    std::array<Port,N> ports; 
...
}

如果您希望能够在Router latver 上指定ports的大小。顺便说一句,N必须是从编译时间已知的常数。

否则您需要std::vector

否,必须在编译时知道大小。改用std::vector

class Router{
    std::vector<Port> ports;
public:
    Switch(int numberOfPortsOnRouter) : ports(numberOfPortsOnRouter) {
    }
};

std::array<T, N>的大小是一个编译时常数,在运行时无法更改。如果您想要具有灵活界限的数组,则可以使用std::vector<T>。如果数组的大小不会改变,并且您以某种方式从其上下文中知道大小,则可以考虑使用std::unique_ptr<T[]>。它有点轻巧,但也无助于复制或调整大小。

std::array filex 长度的数组。因此,必须在编译时知道长度。如果您需要具有动态长度的数组,则需要使用std::vector

class Router{
    std::vector<Port> ports;
public:
    Switch(int numberOfPortsOnRouter):ports(numberOfPortsOnRouter){}
};