初始化类中的向量,将其大小作为参数传递

时间:2016-06-14 16:34:11

标签: c++ vector constructor

我想初始化一个尺寸为3xNmax的2D矢量(一个类中的私有),Nmax将在main(类外)中分配。

其实我有:

class Particle
{
public:
   Particle();

   void setNmax(float Nmax){
     _Nmax=Nmax; // this method is actually useless: _Nmax is set below
   }

private:

   int _Nmax=30000; // The parameter I want to set from outside

   vector<vector<float> > _x{3, vector<float> (_Nmax)}; //the 2D vector to be initialized

我是否需要在构造函数中移动声明和初始化?

EDIT1:谢谢你的回答。关于我不需要使用变量_Nmax的事实,(因为向量带有它自己的大小),我认为在开始时声明具有一定固定大小(Nmax)的向量并且避免在向量期间调整它的大小。代码执行会使我的代码运行得更快而不是多次使用“push_back”这个假设是否正确?

2 个答案:

答案 0 :(得分:1)

使用成员初始化列表:

#include <vector>
class Particle
{
    public:
       Particle(size_t Nmax = 30000) : xVect(3, std::vector<float>(Nmax)) {}

    private:
       vector<vector<float> > xVect;
};

此外,不需要携带无关的成员变量_nMax来表示向量中的元素数量。向量通过调用vector::size()函数知道自己的大小。

引入额外的变量来完成这项工作会增加错误发生的可能性,因为如果向量更改大小,就会忘记更新此变量。

此外,使用下划线启动变量不是一个好主意。带有下划线的名称是为系统库代码保留的。

答案 1 :(得分:1)

#include <vector>

class Particle
{
public:
   Particle(std::size_t nmax = 30000)
     : _Nmax(nmax)
     , _x { std::vector<float>(nmax),
            std::vector<float>(nmax),
            std::vector<float>(nmax)
          }
  {
  }


   void setNmax(std::size_t Nmax)
   {
     _Nmax = Nmax;
     for (auto& e : _x) {
       e.resize(Nmax);
     }
   }

private:

   std::size_t _Nmax=30000; // The parameter I want to set from outside

   std::vector<std::vector<float> > _x; //the 2D vector to be initialized
};