我正在尝试将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()语句将是一个持续的过程......