[問題] memset有辦法初始int array為全1嗎?

看板C_and_CPP作者 (ads901119)時間14年前 (2010/01/24 09:14), 編輯推噓5(5015)
留言20則, 13人參與, 最新討論串1/1
在C++ reference的網站中提到: void * memset ( void * ptr, int value, size_t num ); Fill block of memory Sets the first num bytes of the block of memory pointed by ptr to the ^^^^^^ specified value (interpreted as an unsigned char). 因此如果我寫: int a[5][5]; memset(a, 1, sizeof(a)); 成是應該會把a[][]設成一個5*5, 每個都是 00000001 00000001 00000001 00000001 (2進位)的array 也就是16843009, 而非我要的1 因此我在找有沒有辦法快速initialize一個二維陣列的方法 (用2層for感覺很慢) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.252.248

01/24 09:17, , 1F
那你為啥不先清為0在assign 1到你要的位置..@@
01/24 09:17, 1F

01/24 09:34, , 2F
因為我要全部都1啊....
01/24 09:34, 2F

01/24 09:43, , 3F
for迴圈還好吧 .. 又不是浮點計算
01/24 09:43, 3F

01/24 09:58, , 4F
別再感覺了。
01/24 09:58, 4F

01/24 10:27, , 5F
好那我修改措詞 有沒有一個指令就能全部初始為非零任意值
01/24 10:27, 5F

01/24 10:37, , 6F
這老問題嚕,沒有,乖乖兩層迴圈
01/24 10:37, 6F

01/24 11:12, , 7F
連續記憶體空間的話, 把MMX一類的指令集拿出來不知道有
01/24 11:12, 7F

01/24 11:13, , 8F
沒有辦法XD
01/24 11:13, 8F

01/24 11:52, , 9F
fill(&a[0][0], &a[5][0], 1)
01/24 11:52, 9F

01/24 13:26, , 10F
一層就好了吧
01/24 13:26, 10F

01/24 13:36, , 11F
科科, 忘記是每個byte一個值...
01/24 13:36, 11F

01/24 17:41, , 12F
你 sizeof 給錯了~ =_=!
01/24 17:41, 12F

01/24 17:50, , 13F
它那個API只是給你方便而已,執行時不見得會比較快。
01/24 17:50, 13F

01/24 17:52, , 14F
縮短C/C++程式碼不會令電腦加快執行程式。
01/24 17:52, 14F

01/24 17:56, , 15F
XD 可以叫霹靂車幫你優化執行檔~
01/24 17:56, 15F

01/24 18:55, , 16F
一個指令不見得會比多個指令快 要考慮指令週期
01/24 18:55, 16F

01/25 01:54, , 17F
請問用for會慢到哪去?
01/25 01:54, 17F

01/25 02:40, , 18F
某階段是很容易想要鑽這些小事情的...
01/25 02:40, 18F

01/25 11:41, , 19F
要是陣列真的很大 那就用memcpy 1->2->4->8->16->...
01/25 11:41, 19F

01/25 11:42, , 20F
但是 這也不見得比較快阿XDDD
01/25 11:42, 20F
文章代碼(AID): #1BMvxiHT (C_and_CPP)