Re: [問題] 如何擴大array的總記憶體大小?

看板C_and_CPP作者 (我要加入劍道社!)時間16年前 (2009/06/15 09:04), 編輯推噓14(1407)
留言21則, 10人參與, 最新討論串3/3 (看更多)
五分鐘教會你怎麼用 vector: 1. 在 header file 中加入 #include <vector> 2. 宣告 vector 的方法和一般陣列比較不同, 比如你本來寫: int a[10]; 改用 vector 則是這樣寫: vector<int> a(10); ^^^型別 ^^大小 大小可以是變數,不過不能宣告二維陣列 (要也是可以,有點麻煩) 3. 用起來和一般陣列一樣: vector<int> a(10); for(int i = 0; i < 10; ++i) a[i] = i*i; // a = {0, 1, 4, 9, ...} 你的程式要改用 vector 只需要改兩行: ※ 引述《DreamLoser (金屬製品)》之銘言: : #include<iostream> : #include<math.h> : #include<ctime> : #include<cstdlib> : #include<fstream> : #include <complex> #include <vector> : //多include的東西之後寫的東西要用 : using namespace std; : int _tmain(int argc, _TCHAR* argv[]) : { : int length=10; //matrix size 超過20就暴了...比使用D[100][100]小很多很多 : //memory allocate of the matrix : unsigned int size_A = length*length; : unsigned int mem_size_A = sizeof(double) * size_A; : complex<double>* D = (complex<double>*) malloc(mem_size_A); vector<complex<double> > D(size_A); ^^^ 注意這邊要留一個空白 : double i1,i2; : //initial D : int i,j,k; : for(i=0;i<length;++i){ : for(j=0;j<length;++j){ : i1=(double)rand()*2/32767-1; : i2=(double)rand()*2/32767-1; : k=i*length+j; : D[k1]=complex<double>(i1,i2); : } : } : system("pause"); : return 0; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.9.6.2

06/15 17:18, , 1F
嗯, 你會愛上它的 lol
06/15 17:18, 1F

06/15 17:52, , 2F
只學五分鐘,然後push_back之後再對原先取出的 iterator
06/15 17:52, 2F

06/15 17:53, , 3F
做 dereference, 接著死的莫名其妙
06/15 17:53, 3F

06/15 18:30, , 4F
一般來說五分鐘學不會 iterator... XD
06/15 18:30, 4F

06/15 18:54, , 5F
謝謝你阿^^
06/15 18:54, 5F

06/15 18:55, , 6F
想問另一問題就是vector可容納double最大可放多少呢?
06/15 18:55, 6F

06/15 19:13, , 7F
理論上會自己擴大 理論上是無限大 但要看編譯器設定
06/15 19:13, 7F

06/15 19:13, , 8F
一定夠你用 只要你不亂搞的話
06/15 19:13, 8F

06/15 19:17, , 9F
2GB
06/15 19:17, 9F

06/15 19:22, , 10F
最後那個空白好神秘....Orz
06/15 19:22, 10F

06/15 19:24, , 11F
對阿 為什麼要留空白??另外請問二樓 為什麼這樣會壞呢?
06/15 19:24, 11F

06/15 19:24, , 12F
剛剛玩了一下確實會run time 盪掉
06/15 19:24, 12F

06/15 19:38, , 13F
compiler會不知道他是兩個角括號還是還是right shift
06/15 19:38, 13F

06/15 19:39, , 14F
下一版的c++會允許你不用留空白
06/15 19:39, 14F

06/15 19:41, , 15F
vc8我compile ok! 不過為啥pushback後再*他 就會出錯呢
06/15 19:41, 15F

06/15 19:41, , 16F
以前為了美觀每次用角括號間都有空白,現在才知道有這回事
06/15 19:41, 16F

06/15 20:17, , 17F
謝l大解釋, 一看完解釋就發現曾經看過解釋了, 老了Orz
06/15 20:17, 17F

06/16 00:16, , 18F
QQ29: push_back 可能會造空間不夠用,於是要了一塊更大
06/16 00:16, 18F

06/16 00:17, , 19F
的空間,舊的記憶體位址已不再使用,你一取用就掛了
06/16 00:17, 19F

06/16 00:17, , 20F
所以必需重新取得一個 iterator
06/16 00:17, 20F

06/16 09:04, , 21F
給六樓,看stl impl 和system, 可用max_size() 查看
06/16 09:04, 21F
文章代碼(AID): #1ADWwVhe (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ADWwVhe (C_and_CPP)