在新分配的内存中初始化std :: list

时间:2017-08-25 20:08:40

标签: c++ stl

我正在尝试将C ++构造逐步引入现有的C程序,以简化持续维护。一个初始项目正在用std :: list替换链表以减少代码大小并获得对STL迭代器的访问等。

程序使用malloc()为结构数组分配内存,每个结构包含一个链表。简单地用std :: list替换链表指针会失败,因为std :: list没有初始化。这是一个简化的例子,在malloc()初始化列表后需要一些东西:

#include <list>

typedef struct {
  float f;
  int i;
} elt;

typedef struct {
  std::list<elt> elt_list;
} elt_struct;


int main() {

  elt_struct *my_data;

  my_data = static_cast<elt_struct *>(malloc (100 * sizeof (elt_struct)));

  elt e;
  e.f = 3.14;
  e.i = 4;

  my_data[0].elt_list.push_front(e);

  e.f = 2.71;
  e.i = 8;

  my_data[0].elt_list.push_front(e);

  return (0);
}

编辑:根据@LogicSuff的提示,正确的答案似乎是将my_data的初始化更改为:

std::vector<elt_struct> my_data (100);

用现代替代方案取代malloc()语句将是一个持续的过程......

0 个答案:

没有答案