取消引用 std::vector 通过引用传递

Dereferencing std::vector passed by reference

我有一个快速(也可能是愚蠢的)问题,但我无法在网上找到答案:

当我通过引用传递结构时,我可以通过 MyArray->Field1MyArray->Field2 等很好地干净地访问它的字段

对于 std::vector 的元素是否有类似的方法?我知道做到这一点的唯一方法是 MyVector[0][0]MyVector[0][1] 等,或者可能做 std::vector<double> MyVector2 = *MyVector; 然后 MyVector2[0, 1, 2...] = 1.0...

编辑:哇,Whosebug 快速关闭了我的问题...

我想,我对按引用传递和按指针传递感到困惑。我不确定,在我的情况下更好的解决方案是:基本上我有一个 class,我将 std::vector* 设置为“外部”std::vector。它多次使用这个向量,所以出于性能原因我不想一直复制它(而且 class 也会更改它)。通过指针传递它,如上所述,我必须写一些类似 MyVector[0][0] = 3; 的东西,虽然它工作得很好,但它看起来不太好。

根据 wohlstads 的回答(感谢您的解释),更好的写法是 (*MyVector)[0] = 3;

通过引用传递 std::vector 允许您访问其 public 成员,例如:

void f(std::vector<int> & v)
{
    v.resize(1);
    v[0] = 3;
}

但是,您在问题中使用的语法实际上看起来像是通过指针传递。您也可以使用 std::vector 来做到这一点,但在 C++ 中,我们通常更喜欢通过引用传递。如果你有充分的理由通过指针而不是引用传递,你可以这样做:

void f(std::vector<int> * pV)
{
    pV->resize(1);
    (*pV)[0] = 3;
}

*pV 两边的括号是必需的,因为运算符 [] 优先于取消引用运算符 (*);没有这些,*pV[0] 将被解释为 *(pV[0])