作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 如何擴大array的總記憶體大小?
時間Mon Jun 15 17:04:29 2009
五分鐘教會你怎麼用 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
推 Ebergies:嗯, 你會愛上它的 lol 06/15 17:18
推 avhacker:只學五分鐘,然後push_back之後再對原先取出的 iterator 06/15 17:52
→ avhacker:做 dereference, 接著死的莫名其妙 06/15 17:53
推 Ebergies:一般來說五分鐘學不會 iterator... XD 06/15 18:30
推 DreamLoser:謝謝你阿^^ 06/15 18:54
→ DreamLoser:想問另一問題就是vector可容納double最大可放多少呢? 06/15 18:55
推 ianfang:理論上會自己擴大 理論上是無限大 但要看編譯器設定 06/15 19:13
→ ianfang:一定夠你用 只要你不亂搞的話 06/15 19:13
推 chrisdar:2GB 06/15 19:17
推 VictorTom:最後那個空白好神秘....Orz 06/15 19:22
推 QQ29:對阿 為什麼要留空白??另外請問二樓 為什麼這樣會壞呢? 06/15 19:24
→ QQ29:剛剛玩了一下確實會run time 盪掉 06/15 19:24
推 legendmtg:compiler會不知道他是兩個角括號還是還是right shift 06/15 19:38
→ legendmtg:下一版的c++會允許你不用留空白 06/15 19:39
推 QQ29:vc8我compile ok! 不過為啥pushback後再*他 就會出錯呢 06/15 19:41
推 zlw:以前為了美觀每次用角括號間都有空白,現在才知道有這回事 06/15 19:41
推 VictorTom:謝l大解釋, 一看完解釋就發現曾經看過解釋了, 老了Orz 06/15 20:17
推 avhacker:QQ29: push_back 可能會造空間不夠用,於是要了一塊更大 06/16 00:16
→ avhacker:的空間,舊的記憶體位址已不再使用,你一取用就掛了 06/16 00:17
→ avhacker:所以必需重新取得一個 iterator 06/16 00:17
推 freelancer:給六樓,看stl impl 和system, 可用max_size() 查看 06/16 09:04