我有下面一个函数的代码,它将参数作为参数的整数和向量A.我想知道这个auto& A_ref = *A;
是什么意思。我不熟悉& auto。这是否使矢量指针成为一个数组?做这样的事情的价值是什么
void function1(vector<int>* A, int pivot_index)
{
auto& A_ref = *A;
int pivot = A_ref[pivot_index];
}
答案 0 :(得分:4)
似乎代码的作者不知道如何使用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 []
。因此,您可以使用与数组元素相同的方式访问向量的元素。
答案 1 :(得分:2)
auto由编译器扩展,以匹配分配的rvalue。
它将扩展为vector<int>
所以第一行等于
vector<int>& A_ref = *A
无论如何,这段代码不是最安全或最直观的。你可以简单地写一下:
void function1(vector<int>& A, int pivot_index)
{
int pivot = A[pivot_index];
}
答案 2 :(得分:2)
根据http://en.cppreference.com/w/cpp/language/auto这个auto
“指定正在声明的变量的类型将从其初始化程序中自动推断出来。”所以基本上我认为这种“自动”在这种情况下是一个舒适的问题。
*A
返回指针的内容,即向量,并由A_ref
保留。
A_ref[pivot_index]
只是访问向量。
如果您希望在没有A_ref
的情况下访问该向量,则应该使用
(*A)[pivot_index]