在构造函数中初始化成员变量2D vector



类中有一个成员变量二维向量,如下所示:

#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);
    }
}

我也检查了其他的帖子,如这个,这个,和这个,但我认为我的问题不同,我想要一个指定大小的向量由未指定大小的向量组成。

std::vector有一个重载构造函数,它接受vector的大小。

你可以用它来初始化vector:

MyClass::MyClass(int size)
    : vector_size(size),
      vector_2d(size)
{
}

这将初始化vector_2d为具有size元素。每个元素都是默认构造的std::vector<int>对象(每个元素的类型)。

在您的代码中,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) {}

最新更新