[英]What does this code mean ? did this transfer a vector to an array?
我有下面一个函数的代码,它接受一个pivot整数和一个向量A.我想知道这个auto& A_ref = *A;
手段。 我不熟悉&auto。 这是否使矢量指针成为一个数组? 做这样的事情的价值是什么?
void function1(vector<int>* A, int pivot_index)
{
auto& A_ref = *A;
int pivot = A_ref[pivot_index];
}
似乎代码的作者不知道如何使用带有指针的operator []
:)或者他想简化对运算符的访问。 而不是
int pivot = ( *A )[pivot_index];
要么
int pivot = A->operator[]( pivot_index );
他写了
auto& A_ref = *A;
int pivot = A_ref[pivot_index];
* A有类型std::vector<int>
。 所以声明
auto& A_ref = *A;
可写得像
std::vector<int> & A_ref = *A;
auto
允许编译器从初始化表达式中推导出对象的类型。 例如
int x = 10;
auto y = x;
这里y
与其初始化表达式x
具有相同的类型。 如果您不想定义新对象但想要定义对已存在对象的引用,则可以编写例如
int x = 10;
auto &rx = x;
考虑到类std::vector
有重载的下标operator []
。 因此,您可以像访问数组元素一样访问向量的元素。
编译器会自动扩展auto以匹配分配的rvalue。 它将扩展为vector<int>
所以第一行等于vector<int>& A_ref = *A
无论如何,这段代码不是最安全或最直观的。 你可以简单地写:
void function1(vector<int>& A, int pivot_index)
{
int pivot = A[pivot_index];
}
根据http://en.cppreference.com/w/cpp/language/auto此auto
“指定将从其初始化程序自动推断出正在声明的变量的类型。” 所以基本上我认为这种“自动”在这种情况下是一个舒适的问题。
*A
返回指针的内容,即向量,并由A_ref
保持。
A_ref[pivot_index]
只是访问向量。
如果您希望在没有A_ref
的情况下访问矢量,那么您应该这样做
(*A)[pivot_index]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.