2015-05-27 63 views
-2

論的std ::向量和標準陣列論的std ::矢量<T>和標準陣列

說,如果我們下面的代碼:

void myclass::loadArray(void *outData) 
void myclass::loadVector(void *outData) 


void myclass::func() 
{ 
//here we have a vector 
std::vector<int> myVector; 
myVector.resize(10) 

// here we have an array 
int myArray[10]; 

在這裏我不知道什麼將是繼之間的差異實現 // 1:陣列 MyClass的:: loadArray(myarray的)

//2: array 
myclass::loadArray(&(myArray[0])) 


//1: vector 
myclass::loadVector(myVector) 

//2: vector 
myclass::loadVector(&(myVector[0])) 


} 

從我的理解,只是根據如果我們想要使用數組和向量,我們選擇不同的解決方案。 1和2之間沒有區別。如果我錯了,請你糾正我。

+0

編譯並運行它時發生了什麼? –

回答

2

數組的兩個版本是等價的:在第一個數組中,數組被隱式轉換爲第一個元素的指針,第二個元素明確創建第二個元素。

帶矢量的第一個版本無法編譯,因爲沒有隱式轉換爲指針。你必須明確地獲取數組的地址;無論是在第二個版本中,還是與vector.data()

0

1和2對於陣列版本將是相同的。在第一個數組中,數組將衰減到指向第一個元素的指針,第二個指針顯式地使用指向第一個元素的指針。

第一個矢量版本將無法編譯,因爲您無法將std::vector隱式更改爲void*

對於第二個矢量版本,您將使用指向存儲在矢量中的第一個元素的指針調用函數,而不是矢量本身。

相關問題