std::vector,內部儲存的所有元素,都是占用一片連續的記憶體空間。因此,比較好的做法就是直接取第乙個元素的位址,得到了首位址,之後的做法與陣列也是大同小異了。
舉例說明。
假設函式func需要以陣列的方式傳遞,函式原型如下:
void func(double* pdataaddress, size_t ndatacount);
那麼,如果使用陣列,呼叫的方法如下:
double feature[30];
func(feature, 30);
而使用vector,呼叫的方法如下:
std::vector feature(30);
func(&data[0], data.size());
func(feature.data(), feature.size());
需要注意的地方:
1、如果vector長度為零,那就不能取得第乙個元素的位址。因為此時第乙個元素還不存在。程式注意判斷。
2、如果vector的長度變長(例如:不停地進行push_back),那可能導致之前取得的位址變為無效。為了安全,每次進行push_back, insert, assign之類的操作之後,就需要重新取得第乙個元素的位址。因為之前取得的位址可能已經無效了。
2、vector.data()函式返回陣列指標,參考
C 中vector動態陣列
目錄 0.寫在前面 1.基本操作 2.需求實現 2.1 reverse翻轉vector中元素 2.2 使用sort排序 2.3 列印vector的方式 2.4 構造乙個陣列,並且封裝為vector 3.vector作為引數的三種傳參方式 傳值 傳引用 傳指標 4.vector中begin end f...
C 動態陣列vector實現
最近在做將matlab 轉化為c c 的工作,在實際應用時,發現動態陣列非常重要,我在學習的時候也踩了許多坑,這篇就當做一篇踩坑筆記,希望讀者能夠繞開我踩過的坑,順利應用動態陣列。其實在c語言中,都是靜態陣列,即需要在定義的時候就定下該陣列的長度,然而這在實際的應用中,很大的一部分情況是我們並不知道...
原創 C 動態陣列 vector 詳解
一 引入 引入 略 vector收錄在stl裡,是一種特殊的資料結構。它的中文名字叫做 動態陣列 或者 不定長陣列 有時也被翻譯成 容器 說白了,vector就是乙個功能強大的陣列。下面讓我們來體驗它強大的功能吧!二 vector的標頭檔案 vector收錄在std庫里,所以呼叫vector需要 i...