0

我到处读到 back() 函数返回对最后一个元素的引用,但我有疑问。

我创建了一个包含元素 1,3,5 的向量。然后我编写了以下代码

int i = v.back();
i++;

在上述两个语句之后,我打印了向量并得到了输出 1 3 5 而当我增加引用时它应该是 1 3 6。

但是当我做 (v.back())++ 然后打印向量的值时,我得到了结果

1 3 6

我不明白输出的区别,在我看来应该是一样的。如果我错了,请纠正我。

4

3 回答 3

8

该代码不会通过引用增加最后一个元素,它会增加最后一个元素的副本。改成:

int& i = v.back();
i++;
于 2012-07-06T09:18:07.910 回答
0

据此 back() 返回参考。要更改您的项目,请将其分配给引用或指针,如下所示:

int& iref = v.back();
int* iptr = &v.back();

这些变量的所有进一步修改都会导致向量元素的变化。

于 2012-07-06T09:20:13.020 回答
0
int i = v.back();
i++;

这将增加i,而不是向量内的值。如果你想增加向量的最后一个元素,要么像你做的那样做(用(v.back())++)或使用参考:

int& i = v.back();
i++;
// v.back is now +1
于 2012-07-06T09:18:21.303 回答