我可以用花括号构建一个链表吗?

时间:2014-03-28 00:53:04

标签: c++ linked-list copy-constructor singly-linked-list 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中找到这样的问题,但它们都包含模板,我还没有学到。如果我可以让我的构造函数执行此操作,是否可以在不使用模板的情况下执行此操作?

3 个答案:

答案 0 :(得分:2)

是的,你可以这样做(使用C ++ 11)。

您需要定义一个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。 如果您不理解这一点,则很可能对您的应用程序不太重要。

答案 1 :(得分:0)

您需要一个带std::initializer_list的构造函数。请在此处查看示例:http://en.cppreference.com/w/cpp/utility/initializer_list

答案 2 :(得分:0)

不是真的。我相信花括号中的数字列表的声明会混淆编译器。最好声明一个int数组并将其传递给一个带有int数组和size变量的构造函数请考虑以下内容:

int aray[] = {5,6,11,22,11};
int size   = sizeof(aray)/sizeof(int);

MyList(size,aray);