关于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*
。
对于第二个向量版本,您将使用指向存储在向量中的第一个元素的指针调用函数,而不是向量本身。
关于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*
。
对于第二个向量版本,您将使用指向存储在向量中的第一个元素的指针调用函数,而不是向量本身。