在构造函数中初始化成员变量二维向量
initializing member variable 2D vector in constructor
我在一个class中有一个成员变量二维向量,像这样:
#include <vector>
...
class MyClass {
private:
int vector_size;
std::vector<std::vector<int> > vector_2d;
public:
MyClass(int _vector_size);
~MyClass();
} // class MyClass
我想知道实现构造函数 MyClass(int _vector_size)
以将向量完全初始化为由 _vector_size
空向量组成的最佳方法。我现在的代码如下(在我为测试正确性而编写的一个小玩具程序中它工作得很好),但我觉得 temp_vec
的声明和常量 temp_vec.clear()
可能有点多余的。
MyClass::MyClass(int _vector_size):
vector_size(_vector_size)
{
// initialize vector_2d
vector_2d.clear();
// push initialized 1D vectors
for (int i = 0; i < vector_size; ++i) {
std::vector<int> temp_vec;
temp_vec.clear();
vector_2d.push_back(temp_vec);
}
}
我还检查了其他帖子,例如 this, this, and this,但我认为我的问题有所不同,因为我想要一个 指定大小 的向量,其中包含 未指定大小的向量.
在您的代码中,vector_2d
首先默认初始化为空 std::vector
(因此调用 clear()
是多余的),然后在构造函数的主体中进行修改。
您可以直接在成员初始化器列表中初始化它。例如
// initializa vector_2d as containing _vector_size empty std::vector<int>
MyClass::MyClass(int _vector_size):
vector_size(_vector_size), vector_2d(_vector_size) {}
std::vector
have a constructor overload 需要矢量的大小。
您可以使用它来初始化您的向量:
MyClass::MyClass(int size)
: vector_size(size),
vector_2d(size)
{
}
这将初始化 vector_2d
以具有 size
个元素。每个元素都是默认构造的 std::vector<int>
对象(每个元素的类型)。
我在一个class中有一个成员变量二维向量,像这样:
#include <vector>
...
class MyClass {
private:
int vector_size;
std::vector<std::vector<int> > vector_2d;
public:
MyClass(int _vector_size);
~MyClass();
} // class MyClass
我想知道实现构造函数 MyClass(int _vector_size)
以将向量完全初始化为由 _vector_size
空向量组成的最佳方法。我现在的代码如下(在我为测试正确性而编写的一个小玩具程序中它工作得很好),但我觉得 temp_vec
的声明和常量 temp_vec.clear()
可能有点多余的。
MyClass::MyClass(int _vector_size):
vector_size(_vector_size)
{
// initialize vector_2d
vector_2d.clear();
// push initialized 1D vectors
for (int i = 0; i < vector_size; ++i) {
std::vector<int> temp_vec;
temp_vec.clear();
vector_2d.push_back(temp_vec);
}
}
我还检查了其他帖子,例如 this, this, and this,但我认为我的问题有所不同,因为我想要一个 指定大小 的向量,其中包含 未指定大小的向量.
在您的代码中,vector_2d
首先默认初始化为空 std::vector
(因此调用 clear()
是多余的),然后在构造函数的主体中进行修改。
您可以直接在成员初始化器列表中初始化它。例如
// initializa vector_2d as containing _vector_size empty std::vector<int>
MyClass::MyClass(int _vector_size):
vector_size(_vector_size), vector_2d(_vector_size) {}
std::vector
have a constructor overload 需要矢量的大小。
您可以使用它来初始化您的向量:
MyClass::MyClass(int size)
: vector_size(size),
vector_2d(size)
{
}
这将初始化 vector_2d
以具有 size
个元素。每个元素都是默认构造的 std::vector<int>
对象(每个元素的类型)。