C++:基于构造函数参数初始化向量
C++ : Initializing vector based on constructor param
很抱歉连续问了两个问题。
我想将对象的向量声明为实例数据,然后在构造函数中初始化其大小,例如:
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
,可以人为地限制向量的上限。
相关文章:
- C++转换参数初始化问题
- 在构造函数中使用可变参数初始化 std::tuple
- 类模板专用化演绎是否应该考虑演绎指南参数初始化?
- 如何通过参数初始化构造函数中的数组?
- 在模板类中使用"this"会导致参数初始化错误
- 如何使用一些参数初始化动态分配的数组中的对象
- 使用模板参数初始化静态 const 成员
- 基于模板参数初始化静态字符
- 使用参数初始化
- 使用参数包参数初始化"std::array"
- 从按值构造函数参数初始化的引用成员
- 使用派生的[C++]生成的参数初始化基类
- 一个C++默认参数可以用另一个参数初始化吗
- 如何用功能指针作为参数初始化静态成员的模板
- 用参数初始化另一类构造函数中的对象
- C :如何通过其构造函数的参数初始化类内部矩阵的尺寸
- C++:基于构造函数参数初始化向量
- 正在使用模板参数初始化stl类
- 如果类 A 修改其构造参数,我可以使用常量参数初始化 const A 吗?
- 使用结构非类型可变参数模板参数初始化结构的字符串数据成员