簡體   English   中英

我可以用花括號構建一個鏈表嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM