对象矢量的初始化

时间:2016-08-03 14:23:35

标签: c++ object vector heap

在我提出问题之前,让我提前提一下,我知道这个话题已经讨论了很多,但是再一次通过查看大多数答案,我没有找到实现我想要的正确方法(很可能是因为我错过了给出的回答。) 所以,假设我想要创建20倍的对象向量(比如每个大小为10),它应该是全局范围的(在某种意义上说,这是在类中完成的,我希望这些对象向量在类外传递)。 所以,我真的不确定以下内容是否有效:

for ( int i =0; i<20; i++)
 vector<A> * vec_of_class = new vector<A>(10);
 /*where A is the class and I use new to have them in the heap,
 so that they won't be local */

现在,我知道这意味着我应该特别小心处理它们 并确保我先删除它们,但我不确定我正在进行的操作是否有效。一般来说,我想实现初始化20个不同的对象A向量,可以在全局范围内使用(操作发生在另一个类的函数内),我知道可以使用它 对象A的向量向量,但我想知道如何正确地进行这种操作(在另一个类的body函数内初始化对象A的20个不同向量并全局使用它们)。 我希望,我的问题不是混淆,你可以在这里给我一些帮助。

3 个答案:

答案 0 :(得分:4)

当您动态分配任何标准容器(包括vector)时,绝不会出现这种情况。所以std::vector<> = new <>总是错的。

要初始化矢量,您可以使用多种技术。我发现初始化列表特别方便,如下所示:

std::vector<int> vec{10, 20, 30, 40, 50};

答案 1 :(得分:0)

如果将变量声明为函数,则该变量的范围将是函数。它无法从外面访问。

你可以做的是在全局范围内声明20个指针,并在任何你想要的地方(例如在函数内)初始化它们。

答案 2 :(得分:0)

  

所以,说我想要创建20次对象向量(比如每个大小为10)

这很容易。使用:

std::vector<std::vector<A>> my_data{20, std::vector<A>{10}};
  

应该是全局范围的(在某种意义上说,这是在一个类中完成的,我希望这些对象向量在类外传递)。

我没有清楚了解你想在这里完成什么。

当在类中完成某些操作时,可以在static成员函数或常规成员函数中完成。看起来您应该使用static成员函数,但我不确定。

如果您使用static成员函数,我建议:

std::vector<std::vector<A>> const& TheClass::get_my_data()
{
   static std::vector<std::vector<A>> my_data{20, std::vector<A>{10}};
   static bool inited = false;
   if ( !inited )
   {
      // Set the values of the elements in my_data
      // ...

      inited = true;
   }
   return my_data;
}

如果您使用常规成员函数,我建议在构造函数中填充my_data并从函数返回。

// Need to make my_data a member variable
TheClass::TheClass() : my_data{20, std::vector<A>{10}}
{
   // Set the values of the elements in my_data
   // ...
}

std::vector<std::vector<A>> const& TheClass::get_my_data() const
{
   return my_data;
}