也请关注此主题: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。
我哪里错了?有什么不同?
答案 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;