Re: [問題] 龐大的二維矩陣建立

看板C_and_CPP作者 (Cindy Wang)時間14年前 (2011/06/25 22:52), 編輯推噓5(5016)
留言21則, 9人參與, 最新討論串2/6 (看更多)
※ 引述《Xhocer (Xho)》之銘言: : 看了精華區裡提到 : int array[2000000000]; : 像這種太大的陣列 : 可利用int *array=new int[2000000000];的方式來建立 : 那請問二維陣列要如何用這種方式建立 : 假設有個array是[15000][40] 有兩種做法, 方法不太一樣: 1) int ** array = new int*[15000]; for(int i=0; i<15000; ++i) array[i] = new int[40]; 這是兩層的作法, 第一層是一有 15000 個 int* 的一維陣列, 然後各自是 40 個 int 的一維陣列. 2) int (*array)[40] = new int[15000][40]; 這是連續的 15000x40 個 int 的二維陣列. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.242.246.249

06/25 22:53, , 1F
第二個方法的記憶體好像比較接近 int array[15000][40];
06/25 22:53, 1F

06/25 23:04, , 2F
小弟我每次要寫第二種方法那種pointer的宣告都要試誤個
06/25 23:04, 2F

06/25 23:04, , 3F
半天....Orz
06/25 23:04, 3F

06/25 23:05, , 4F
其實第二個我也沒用過....XDD
06/25 23:05, 4F

06/25 23:10, , 5F
!!
06/25 23:10, 5F

06/25 23:43, , 6F
注意(2)的最低維一定要是個正整數常數, 這兩個不等價
06/25 23:43, 6F

06/25 23:49, , 7F
應該說除了最高維以外都要
06/25 23:49, 7F

06/26 01:31, , 8F
問 要怎麼把vim的syntax coloring貼到bbs上啊
06/26 01:31, 8F

06/26 01:32, , 9F
自己打色碼
06/26 01:32, 9F

06/26 13:14, , 10F
pietty 的「貼上指定格式」
06/26 13:14, 10F

06/26 14:15, , 11F
用第一個吧!總覺得第二個散發未定義的氣息...
06/26 14:15, 11F

06/26 14:22, , 13F
缺點就是板主妹說得那樣,如果要 new 出一個多維陣列
06/26 14:22, 13F

06/26 14:23, , 14F
那麼其他維度要受限制,不能用成變數,在 Runtime 才去決
06/26 14:23, 14F

06/26 14:23, , 15F
定。反之,第一種方法可在 Runtime 決定
06/26 14:23, 15F

06/26 14:37, , 16F
我剛剛看了purpose的連結,它說第一維的空間可以為0
06/26 14:37, 16F

06/26 14:37, , 17F
~"~這樣設計的邏輯在?
06/26 14:37, 17F

06/26 14:45, , 18F
我記得那是很神奇的東西...XD
06/26 14:45, 18F

06/26 14:52, , 19F
其實還有一個是 int *array = new int[15000*40];
06/26 14:52, 19F

06/26 16:16, , 20F
第一維的大小為 0 大概是指標,不重要
06/26 16:16, 20F

06/26 22:18, , 21F
= =再次看正姐和purpose,才發現喔,的確有這限制
06/26 22:18, 21F
※ 編輯: CindyLinz 來自: 210.242.246.249 (09/10 13:17)
文章代碼(AID): #1E1VOV_j (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E1VOV_j (C_and_CPP)