这段代码是什么意思?这是否将矢量传输到数组?

时间:2015-03-15 16:01:57

标签: c++

我有下面一个函数的代码,它将参数作为参数的整数和向量A.我想知道这个auto& A_ref = *A;是什么意思。我不熟悉& auto。这是否使矢量指针成为一个数组?做这样的事情的价值是什么

void function1(vector<int>* A, int pivot_index)
{
    auto& A_ref = *A;
    int pivot = A_ref[pivot_index];
}

3 个答案:

答案 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]