讨论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(myArray的)
//2: array
myclass::loadArray(&(myArray[0]))
//1: vector
myclass::loadVector(myVector)
//2: vector
myclass::loadVector(&(myVector[0]))
}
根据我的理解,只要我们想要使用数组和向量,我们选择不同的解决方案。 1和2之间没有区别。如果我错了,请你纠正我。
答案 0 :(得分:2)
带有数组的两个版本是等价的:在第一个中,数组被隐式转换为指向其第一个元素的指针,第二个元素显式创建。
带向量的第一个版本将无法编译,因为没有隐式转换为指针。你必须明确地得到数组的地址;或者像在第二个版本中那样,或者使用vector.data()
。
答案 1 :(得分:0)
1和2将是相同的。在第一个中,数组将衰减为指向第一个元素的指针,第二个数组将使用指向第一个元素的指针显式调用。
第一个矢量版本无法编译,因为您无法将std::vector
隐式更改为void*
。
对于第二个矢量版本,您将使用指向存储在矢量中的第一个元素的指针调用该函数,而不是矢量本身。