[英]Can i construct a linked list with curly braces?
我是面向对象的C ++的新手,我正在尝试以这种方式为链表创建一个构造函数:
List.h中的某个地方我们有这个:
struct Node
{
int data;
Node *next;
};
然后在main.cpp中,我希望能够构建一个这样的列表:
int main()
{
List A({1,2,3,4,5,6});// I want the amount of numbers to indicate the size of
//the list and the numbers to go into each node in order
return 0;
}
所以我的问题是,我可以制作这样的构造函数吗? 如果是这样呢? 我必须使用模板吗? 我试图在SO中找到这样的问题,但它们都包含模板,我还没有学到。 如果我可以让我的构造函数执行此操作,是否可以在不使用模板的情况下执行此操作?
是的,你可以这样做(使用C ++ 11)。
您需要定义一个采用std::initializer_list<int>
的构造std::initializer_list<int>
。 (是的,这是一个模板,但我会告诉你如何使用它。:-))
std::intitializer_list<int>
可能实现可能如下所示:
//in class List:
List (std::initializer_list<int> init) {
for (auto v : init)
this->emplace_back(v);
}
你必须自己实施emplace_back
作为练习。 emplace_back
应该构造一个新的Node
并将其附加到List
。 它将是一个有用的成员函数(我保证)。
可能不重要的通知:如果emplace_back
执行堆分配,则此代码可能会泄漏。 在这种情况下,委托给将List
置于有效状态的构造函数,因此析构函数可以释放所有堆分配的Nodes
。 如果您不理解这一点,则很可能对您的应用程序不太重要。
你需要一个带有std::initializer_list
的构造std::initializer_list
。 请参阅此处的示例: http : //en.cppreference.com/w/cpp/utility/initializer_list
并不是的。 我相信花括号中的数字列表的声明会混淆编译器。 最好声明一个int数组并将其传递给一个带有int数组和size变量的构造函数请考虑以下内容:
int aray[] = {5,6,11,22,11};
int size = sizeof(aray)/sizeof(int);
MyList(size,aray);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.