2012-07-06 82 views
0

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

我创建与元件1,3,5的载体resp.Then我上述两个语句之后写了下面的代码

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

,我印刷载体和我得到的输出1 3 5 而它应该是1 3 6,因为我增加了参考。

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

1 3 6 

我不明白,在输出差的值,根据对我来说应该是一样的。 如果我错了,请纠正我。

回答

8

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

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

好吧,也许我错了,但作为说back()函数返回一个引用,因此我是最后一个element.so的引用什么是&我的需要。谢谢 – 2012-07-06 09:24:17

+0

是的,我明白了,我是个傻瓜。非常感谢!! – 2012-07-06 09:27:20

+0

是的,'back()'确实返回了一个引用,但是这并不会使''为隐式引用。您必须声明'i'作为引用,否则它会复制'back()'返回值所引用的对象。 – hmjd 2012-07-06 09:27:56

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

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

int& i = v.back(); 
i++; 
// v.back is now +1 
0

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

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

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