关于std::vector<T>和标准数组的讨论

Discussion about std::vector<T> and standard array

关于std::vector和标准数组的讨论

假设我们有以下代码:

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(我的数组)

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


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

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


}

据我了解,只是根据我们是否要使用数组和向量来选择不同的解决方案。 1和2没有区别,有错请指正

数组的两个版本是等效的:在第一个版本中,数组被隐式转换为指向其第一个元素的指针,第二个版本显式创建。

带有向量的第一个版本无法编译,因为没有隐式转换为指针。您必须明确获取数组的地址;就像您在第二个版本中所做的那样,或者使用 vector.data().

1 和 2 对于数组版本是相同的。在第一个中,数组将衰减为指向第一个元素的指针,第二个使用指向第一个元素的指针显式调用。

第一个矢量版本将无法编译,因为您无法将 std::vector 隐式更改为 void*

对于第二个向量版本,您将使用指向存储在向量中的第一个元素的指针调用函数,而不是向量本身。