c 鍊錶如何用 進行初始化?

時間 2021-06-01 04:34:58

1樓:

樓上都好厲害,我只想到了 `std::initializer_list`

#include

#include

template

T>struct

ListNode

};template

T>class

LinkList

LinkList

(const

std::

initializer_list

&list

)head

=preHead

->next

;delete

preHead;}

virtual

~LinkList()}

void

print

()const

std::

cout

<

endl;}

ListNode

*head;};

intmain();

link_list

.print

();}

2樓:大鈾子

本來想用委託建構函式的,後來想想,用摺疊表示式說不定會更好?

#include

using

namespace

std;

template

T>class

MyList

};int

main();

for(

autox:

myList.l

)return0;

}解釋一下,使用{}初始化時,如果不存在接收initializerlist的建構函式時,就會找乙個能與大括號中內容逐個匹配的建構函式。這裡編譯器會呼叫變長引數模板的建構函式。其中是C++17的摺疊表示式,意思是將變長引數f的每乙個,依次呼叫l.

push_back方法。

--------2019/03/28更新--------委託建構函式的也寫了乙個。

#include

using

namespace

std;

template

T>class

MyList

template

...F

>MyList(T

t,F...f)

:MyList(f

...)

};int

main();

for(

autox:

myList.l

)return0;}

3樓:

傳陣列或者std::vector是正解。非要傳入可變引數的話,我來給題主指一條明路(逃)。

template

T>struct

link_list

};template

Arg,

typename

...Args

>link_list

(Arg

,Args

...)

->link_list

;

4樓:d41d8c

寫乙個建構函式模板,接受引數為T(&&)[N]。

雖然醜了點,但可以支援移動語義,不像initializer_list只支援const訪問所以只能從初始化列表複製構造。

template

struct link_list ;

C 類本身的初始化和靜態欄位的初始化到底發生在什麼時候?

餘葉 其實就兩個構造器。乙個是靜態的,乙個是普通的。靜態構造器得需要你第一次訪問到該類的時候會被觸發。建立的時候,包括 static 成員變數的初始化和static構造器,其實 static 成員變數會整合進static構造器裡面的。而普通成員變數也會整合進普通構造器裡面的。 天煞 如 Sai說的,...

c 變數初始化規則有哪些?

針對C 11,簡單地說,我認為可以分為下面兩條 使用auto關鍵字的初始化 auto i 1 這樣的,注意的地方就是用了auto就不要用 不要寫成auto i。這兩個是不一樣的,具體請參考initializer list這個東西。不使用auto關鍵字,使用 的初始化。int i 這樣。不要用auto...

C語言 關於C裡面陣列批量初始化

蛋蛋的蛋 int a 1000 補充一下,類似的方式可以讓前500個元素等於1,後500個等於0,手機打字,不方便,有心人自己嘗試吧, 向晨 c標準庫有個limits.h的標頭檔案,裡面有你所使用機器的int char等型別變數的位元組長度和大小限制相關的巨集,可以用這些巨集來知道乙個int對應幾個...