[問題] 可變size的vector怎麼做

看板C_and_CPP (C/C++)作者 (無聊人)時間16年前 (2009/12/17 02:21), 編輯推噓14(14019)
留言33則, 11人參與, 最新討論串1/1
各位前輩 不好意思 小弟是初學C不到一週的人 想請教一個基本的問題 就是可變size的vector該如何寫? 我現在有一個a.h標頭檔 裡面寫了 #define N 10 這樣我在寫其他.c檔時 只要 #include "a.h" 就可以在.c裡面宣告 float temp[N]={0}; 但我現在希望 N 是可變的 例如 mode=1 時 N=10 mode=2 時 N=20 mode=3 時 N=30 於是我把a.h改為 #define N1 10 #define N2 20 #define N3 30 並且在.c裡面寫 int N; if(mode==1) N=N1; else if(mode==2) N=N2; else if(mode==3) N=N3; float temp[N]={0}; 然而這樣卻不行~~別人說array的維度不能是變數 請問要怎麼改 才能將 N 作成可變的呢 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.191.99

12/17 02:27, , 1F
malloc
12/17 02:27, 1F

12/17 09:03, , 2F
關鍵字: 動態配置 或 動態陣列.
12/17 09:03, 2F

12/17 09:04, , 3F
C++的話, 就有STL的vector可以直接用了XD
12/17 09:04, 3F

12/17 09:33, , 4F
vector<vector<int> > aa;
12/17 09:33, 4F

12/17 09:33, , 5F
matrix.resize(s);
12/17 09:33, 5F

12/17 09:34, , 6F
這樣aa就是s*n的陣列了,n還沒確定,看你需求
12/17 09:34, 6F

12/17 09:39, , 7F
上面matrix改aa
12/17 09:39, 7F

12/17 10:42, , 8F
用C++原本的VECTOR就好啦
12/17 10:42, 8F

12/17 10:46, , 9F
說不定人家要學的是C語言啊XD
12/17 10:46, 9F

12/17 11:01, , 10F
這是C語言的應用阿,原po已經說了是.c
12/17 11:01, 10F

12/17 11:08, , 11F
c就直接VLA硬上了啊 根本不成問題
12/17 11:08, 11F

12/17 11:12, , 12F
初學一週就要人家VLA了嗎Orz 搞不好它的compiler還不支
12/17 11:12, 12F

12/17 11:13, , 13F
援勒XD
12/17 11:13, 13F

12/17 11:14, , 14F
VLA這樣設計就是為了讓user用起來沒感覺啊XD
12/17 11:14, 14F

12/17 11:14, , 15F
給新手用也沒什麼不好的
12/17 11:14, 15F

12/17 11:16, , 16F
不支援的compiler丟掉算了 今年都2009了...
12/17 11:16, 16F

12/17 11:20, , 17F
別這麼說嘛, 您瞧瞧看 http://ppt.cc/VM13 XDDD
12/17 11:20, 17F

12/17 11:22, , 18F
他們是Visual "C++" 這不一樣
12/17 11:22, 18F

12/17 11:27, , 19F
後來才注意到他們是在講C++了....Orz
12/17 11:27, 19F

12/17 13:08, , 20F
我用Dev C++寫C耶...樓上各位前輩在講什麼 看不懂 XD
12/17 13:08, 20F

12/17 13:22, , 21F
VAL就是說,int N = 10; int arr[N]; 是合法的
12/17 13:22, 21F

12/17 13:23, , 22F
從C99這個標準開始允許這種寫法 但dev-C++可能不支援
12/17 13:23, 22F

12/17 13:27, , 23F
variable length array (VLA)
12/17 13:27, 23F

12/17 19:01, , 24F
「動態記憶體配置」與「動態陣列」兩者意義不太一樣…
12/17 19:01, 24F

12/17 19:02, , 25F
動態陣列是像 STL vector 那樣的東西…
12/17 19:02, 25F

12/17 19:03, , 26F
動態記憶體配置是 malloc calloc 以及 new 這幾個東東…
12/17 19:03, 26F

12/17 19:06, , 27F
不然的話,最簡單的方法就是搞個「鏈結串列」吧!@@|||
12/17 19:06, 27F

12/17 19:10, , 28F
… Linked List 特性跟動態陣列差不多。
12/17 19:10, 28F

12/17 19:12, , 29F
另外一個就是,vector增加元素時是砍舊資料,再建一個新的
12/17 19:12, 29F

12/17 19:14, , 30F
也可以用 malloc 或 new 實作一個 vector 來用。@@|||
12/17 19:14, 30F

12/17 22:34, , 31F
樓上, 去查一下, VLA 跟你想的不太一樣, 他是專用名詞了
12/17 22:34, 31F

12/18 06:17, , 32F
=_=!難道,他所問的問題不是「用C實作vector」嗎?
12/18 06:17, 32F

12/18 06:24, , 33F
純 C 又是動態 size 的真正焦點其實是 realloc()
12/18 06:24, 33F
文章代碼(AID): #1BAIKKkE (C_and_CPP)
文章代碼(AID): #1BAIKKkE (C_and_CPP)