2012-07-06 81 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(); 

這些變量的所有進一步修改都會導致向量元素的更改。