运营商[]不应该尊重吗?

时间:2016-07-01 10:11:35

标签: c++ pointers

也请关注此主题:What does "dereferencing" a pointer mean?

assert(p[1] == 'b');

operator []应该自动使用指针,让我直接“更改”指向数据的值。

但如果我做这样的事情:

void QuadraticInterpolateArray(vector<double> *b) {

    // ...

    double step = 12.2;
    for (int j = 0; j < (*b).size(); j++) {
        b[j] = step;
    }

    // ...
}

我不能使用b[j] = step;,即我试图在向量的每个索引处设置12.2。

我哪里错了?有什么不同?

2 个答案:

答案 0 :(得分:4)

std::vector::operator[]取消引用指向向量的内部数组的开头的指针,该内部数组添加了偏移量。您自己添加了另一个间接级别,因此您必须(*b)[j]拨打operator[]上的std::vector

b[j]但是,在operator[]上调用了std::vector*,这会为您提供std::vector(如果j = 0未指向b,则仅对double有效数组)。您无法将std::vector<double>分配给void QuadraticInterpolateArray(vector<double> &b) { // TODO: use std::fill double step = 12.2; for (int j = 0; j < b.size(); j++) { b[j] = step; } }

是的,您应该使用参数的参考,这样您可以使用与值相同的语法,但是使用指针更改传递的矢量。

{{1}}

答案 1 :(得分:1)

为了通过指向该向量的指针访问向量的每个元素,您必须首先通过取消引用指向它的指针来获取向量值,然后您可以在该向量上使用operator []来访问其元素:

(*b)[i] = step;