[問題] resize dynamic allocated array (C++)

看板C_and_CPP作者 (兄弟霸業)時間14年前 (2010/03/28 03:03), 編輯推噓2(2010)
留言12則, 7人參與, 最新討論串1/1
由於程式的執行中 有幾個地方有可能需要將dynamic allocate的array做resize 我知道C有reallocate的功能 但是我不太想用C(純粹是我龜毛而已) 剛好又規定不能用STL 查了好久 C++好像沒resize的語法 於是自己寫了一個 但是我不知道這樣寫行不行(因為擔心用不同compiler的話不知道會不會出錯) 有錯的話請各位大大盡量鞭~ //main function 在程式最後面 #include <iostream> using namespace std; int size = 5; class cla { public: void f(); private: void resize(int *&, int); int *a1; }; void cla::f() { a1 = new int [size]; for(int i = 0 ; i < size ; i++) //給值 a1[i] = i+100; resize(a1,size+1); /* 印出結果 結果應該為100 101 102 103 104 -1,而之後全部亂碼*/ for(int i = 0 ; i < 15 ; i++) cout<<a1[i]<<" "; } void cla::resize(int *&arr, int len) { int* newArr = new int[len]; for(int i = 0 ; i < len ; i++) //只是隨便給個初值 newArr[i] = -1; memcpy( newArr, arr, size * sizeof(int) );//將原本array的值copy到新array size = len; //重新定義array的大小 delete [] arr; arr = newArr; } int main() { cla a; a.f(); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.190.206

03/28 03:51, , 1F
規定不能用STL ???
03/28 03:51, 1F

03/28 09:49, , 2F
若是 resize 的 len 比原來小就不需要重新 allocate 了
03/28 09:49, 2F

03/28 09:50, , 3F
cla 可以用 template 的方式寫比較 general
03/28 09:50, 3F

03/28 12:57, , 4F
可是memcpy也是C..........
03/28 12:57, 4F

03/28 12:57, , 5F
在用C++的時候還要排斥C的部份也太累了吧 XD 可用realloc
03/28 12:57, 5F

03/28 13:27, , 6F
不要花時間在無謂的堅持上面...
03/28 13:27, 6F

03/28 14:03, , 7F
new/delete的底層不也是malloc/free堆出來的@_@"
03/28 14:03, 7F

03/28 14:04, , 8F
另外, 不依賴STL是一種練習, 但是沒什麼寫C++不能用C
03/28 14:04, 8F

03/28 14:04, , 9F
function這種事, C++的特性裡沒有禁止使用C的Lib吧??
03/28 14:04, 9F

03/28 14:05, , 10F
純粹要練習的話另當別論, 不過把realloc自己拆成new->
03/28 14:05, 10F

03/28 14:09, , 11F
copy->delete, 不考慮ctor與dtor的問題應該就沒錯了吧@@
03/28 14:09, 11F

03/28 14:35, , 12F
主要是想自己練習 0.0
03/28 14:35, 12F
文章代碼(AID): #1BhbQC-Z (C_and_CPP)