[問題] 指標初使化

作者: wwwearn (小勇)   2014-07-15 14:50:11
最近想到了一個問題
int *iArray=new int[100];
memset(iArray,0,sizeof(int)*100);
這樣就可以完成了iArray清0的工作
可是如果我希望每個整int都為-1呢?
memset好像是以每個位元組做為間隔為單位的好像不行?
for(int i=0;i<100;i++)
{
iArray[i]=-1;
}
感覺這樣寫又有點麻煩
後來有想了一下
int iTemp[]={-1,-1,-1};
iArray=iTemp;
發現是可以的但是只能用在長度不高的地方
而且因為是靜態宣告離開函式應該就自動釋放了
int *iArray[]={new int(-1),new int(-1),new int(-1)};
這樣寫是有解決了靜態宣告的缺點
但是這樣寫也只能在長度不高的地方而且基本宣告已經不同了
不知道有沒有更好的寫法??
作者: EdisonX (卡卡獸)   2014-07-15 14:56:00
vector 不行嗎?另你講的動作底層還是用你寫的 for 去做.
作者: azureblaze (AzureBlaze)   2014-07-15 14:57:00
http://ideone.com/Dls7XQ 非常不建議這樣做XD
作者: wwwearn (小勇)   2014-07-15 15:04:00
我是想說盡可能別用到迴圈
作者: azureblaze (AzureBlaze)   2014-07-15 15:09:00
理由是?
作者: wwwearn (小勇)   2014-07-15 15:11:00
如果可以以最短的行數寫完的話看起來比較乾淨= =
作者: Fenikso (薪水小偷)   2014-07-15 15:13:00
那就用vector吧 XD
作者: EdisonX (卡卡獸)   2014-07-15 15:24:00
vector<int> v(nSize,-1); 不夠短嗎?
作者: wwwearn (小勇)   2014-07-15 15:26:00
執行效率方面呢? 跟上面的方法比的化
作者: keeper7478 (the Servant of Cthulhu)   2014-07-15 15:42:00
不會有太大的差別,甚至可能會比較好
作者: LPH66 (-6.2598534e+18f)   2014-07-15 19:05:00
「骯髒事不滅定律」:你不想做的迴圈底層一定有人幫你做你只不過是把迴圈丟給底下的人而已就算是丟給 memset 它的底層還是迴圈, 所以別計較這種差別了至於效率...個人是覺得 memset 比較快上那麼一些些其他則幾乎沒有差異, 但快那一些些不值得這樣寫...
作者: loveme00835 (髮箍)   2014-07-15 19:18:00
看到C++卻沒有用RAII真的很傷心.. 你還是用malloc好了

Links booklink

Contact Us: admin [ a t ] ucptt.com