关于std :: vector <t>和标准数组

时间:2015-05-27 14:40:59

标签: c++ arrays pointers vector reference

讨论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之间没有区别。如果我错了,请你纠正我。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

对于阵列版本,

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

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

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