std::vector,內部儲存的所有元素,都是占用一片連續的記憶體空間。因此,比較好的做法就是直接取第乙個元素的位址,得到了首位址,之後的做法與陣列也是大同小異了。
舉例說明。
假設函式func需要以陣列的方式傳遞,函式原型如下:
void func(double* pdataaddress, size_t ndatacount);
那麼,如果使用陣列,呼叫的方法如下:
double data[30];
func(data, 30);
而使用vector,呼叫的方法如下:
std::vectordata(30);
func(&data[0], data.size());
需要注意的地方:
1、如果vector長度為零,那就不能取得第乙個元素的位址。因為此時第乙個元素還不存在。程式注意判斷。
2、如果vector的長度變長(例如:不停地進行push_back),那可能導致之前取得的位址變為無效。為了安全,每次進行push_back, insert, assign之類的操作之後,就需要重新取得第乙個元素的位址。因為之前取得的位址可能已經無效了。
obj轉換成陣列
原則上obj是不能轉換成陣列的。首先array也是obj。只是乙個特殊的object。obj乙個很關鍵的點,是擁有成員和方法,撇開方法不說,obj就是乙個key value結構。也就是雜湊陣列,而js的陣列只能是由數字索引組成的。撇開了key,只留下value的話資料丟失太多。如果保留了key,那麼...
ruby 雜湊轉換成陣列
最近在測試中得到的結果是雜湊,而case設定的期待結果是寫在陣列中的。所以需要將雜湊轉換成陣列,這樣直接對比陣列,一條語句就搞定了。而ruby貌似沒有直接轉換的方法 也許有,但是我沒發現 於是自己試著寫了乙個方法 def hash to array hash arr hash.each value ...
php之物件轉換成陣列
function std class object to array stdclassobject array is object stdclassobject get object vars stdclassobject stdclassobject foreach array as key va...