繁体   English   中英

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

[英]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/autoauto “指定将从其初始化程序自动推断出正在声明的变量的类型。” 所以基本上我认为这种“自动”在这种情况下是一个舒适的问题。

*A返回指针的内容,即向量,并由A_ref保持。

A_ref[pivot_index]只是访问向量。

如果您希望在没有A_ref的情况下访问矢量,那么您应该这样做

(*A)[pivot_index]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM