Vector memory allocate

宣告: STL vector<vector<struct>> memory allocate: method 1: dynamically allocated. method 2: 直接宣告n*n block, 每個1*1 block 為struct. 當然第二種方式較優, 進行新增刪除效率都較佳. Q1. 請問vector<vector<struct>>是用哪種方法分配空間 Q2. 如果要用, method 2去宣告該如何做 ps. 因為我要進行影像處理, 其陣列約為4096*4096, 所以method 1(2) 其效率會差蠻大. show more 宣告:
STL vector<vector<struct>>

memory allocate:
method 1: dynamically allocated.
method 2: 直接宣告n*n block, 每個1*1 block 為struct.



當然第二種方式較優, 進行新增刪除效率都較佳.
Q1. 請問vector<vector<struct>>是用哪種方法分配空間
Q2. 如果要用, method 2去宣告該如何做

ps. 因為我要進行影像處理, 其陣列約為4096*4096, 所以method 1(2) 其效率會差蠻大.
Update: 了解, 謝謝.
ex1.
struct Pixel[n][n];
請問這樣宣告還會去dynamical allocated?

ex2.
coordinate include x-axis and y-axis
vector v1; == vector v2;
v2大小為v1兩倍. (因為v1每個1*1 pixel 包含兩個int)

vector 也會進行dynamical allocated,
若利用addr(x, y)=bmpWidth*y + x,
計算x, y位於1D array的位址
Update 2: 這樣是否分配(刪除)空間, 較有效率(迅速)?
Update 3: 如果ex1 也是採用dyanmical allocate,
int image[n][n][3];
若要不使用dynamical allocated,
這樣不就要宣告成int image[n*n*3],
並且要建立addressOperation(), 個別計算image[i][i][0] 、image[i][i][1] 、image[i][i][2] 位址.
Update 4: To Tai:

Q1 if your structure is struct A { };
vector < vector < A > > img( n, vector < A > (n));

一般而言我能使用reserve就使用reserve(push_back()新增... 因為上方的initialization,
及resize(), 會進行初始化, 除非我有需要直接assign位址.
Update 5: 在V.S. 2012 struct Pixel[n][n]; 無法直接這樣宣告, 必須使用dynamical allocated
Update 6: 感謝以上網友的意見,
有以下幾個問題:
Q1.
vector.reserve(n)在vector內, 代表我配置n個空間, 但是不給予初始化,
利用push_back(), 就可把資料寫入(因為reserve過, 所以不會有memory copy)

請問我的觀念有錯誤?
倘若非如此, 那reserve的意義是什麼?
Update 7: Q2.
因為malloc 的n值並非固定, 無法直接宣告image[const][const],
若不用 1D array 模擬 2D array,addressOperation() 對 2D image filtering 等等處理,
我應該怎麼做?
Update 8: 每個image[i][i]內的大小為struct, 這樣不就一定要triple pointer去分配空間?
"1D array 模擬 2D array" (single pointer) 其實就是不希望allocate耗費太多時間,
利用轉址函數, 去找實際位址, 這樣的成本會比triple pointer allocate還高?
Update 9: ps. 讀入影像為4096*4096
並且會有其他演算法, 將4096*4096 copy到其他陣列, 進行一些運算, 取得其他結果!
Update 10: 也可能為2048*2048 這是變動的
Update 11: Q3.
vector< vector < Pixel > > img (height, vector < Pixel > (width) );
他初始化都是pixel.x=0 pixel.y=0, 要怎麼讓初始化為255, 還是說沒辦法只能另外assign,
img[i][j]=255?
4 answers 4