1樓:
Github上有類似的專案(head-only庫)給 dynarray 做了些修補和擴充套件,現在還能用,或許可以滿足題主的要求。
首先是這個,出現得比較早,就叫做 dynarray:
Robbepop/dynarray
基本能滿足需求,只要不使用自定義分配器(allocator)的話。如果要用自定義分配器,那可能會導致程式崩掉(取決於自定義分配器怎麼實現)。因為它的內部實現是個unique_ptr,沒有考慮分配器的場景。
接著是這個,名字叫做 VLA for C++: dynarray:
cnbatch/dynarray
從描述來看,其實是做成達到 C99 VLA 那樣的效果,只不過是 C++ 容器版本的。
這個庫自帶的各種函式更加接近現有的各種標準庫容器,也可以用自定義分配器,但分配器使用方式不同於其它的標準庫容器。對於標準庫容器,一般都是要求使用者提供 allocator。而這個庫要求提供 allocator 的模板名。
比較特別的是,這個庫分別用不同的標頭檔案提供了兩種寫法:
寫法1:
vla::dynarray> vla_array_a(100, 300);
寫法2:
vla::
dynarray
2>vla_array_a (100 ,300 );以上均摘抄自專案說明。 對於多維陣列,那應該就是: 寫法1: vla::dynarray>>> vla_array_a(100, 200, 300, 400); 寫法2: vla::dynarray vla_array_a(100, 200, 300, 400); 其中,寫法2很接近於題主的要求。 當然了,如果題主需要在使用過程中動態改變每維陣列的長度(就像 vector 那樣 push 或 pop),那麼這兩個庫都做不到。 2樓:netcan 這屬於C++型別計算範疇問題,除了 @arrayJY提到的傳統模板方式,補充一點,可以使用變數模板來做。 變數模板的好處在於可以構造乙個物件(建構函式)而不僅僅是型別。 template size_t ...Ns >auto vector_n=T {};template size_t N>auto vector_n );template size_tN, size_t ...Ns >auto vector_n >=vector (vector_n >)>(N ,vector_n >);測試用例。 3樓:arrayJY template std:: size_t N>struct vector_n ;template T>struct vector_n vector_n 3>:: type {}// std::vector>> 風中勁草 題主意思可能是兩方面,一是實現shell,就是windows下的批處理指令碼直譯器cmd.exe,這個是不難實現的,可以通過yacc和lex來編寫乙個語法解析器,來實現shell指令碼解釋的功能。另乙個是終端模擬器,實現乙個支援標準輸入輸出以及能夠相容win32下終端處理函式的使用者互動介... p的值被load到某個暫存器r,然後add r,4 就可以了。這裡4已經被編譯器用sizeof array item type 給換成立即數了。所以你說的什麼p 和 1,實際上沒什麼區別。如果有人要拿這個來說快慢,恕我直言,也許是因為他還不夠了解底層的cpu是如何執行指令的這乙個層面。 這個很簡單,... 糖胖胖OVO 乙個很簡單的方式就可以解決了只需將Dictionary dict new Dictionary 改為Dictionary dict new Dictionary 準確的來說就是將TValue變為Nullable型別,這時的default TValue 就是null了。結果為True. ...如何自己用c 實現乙個類似於windows中的cmd的程式?
C語言編譯器是如何實現指標 1這樣的乙個機制?
C 裡如何實現乙個字典,取值時如果key不存在就返回null?