在构造函数中初始化成员变量二维向量

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> 对象(每个元素的类型)。