2014-03-26 59 views
0

我使用listSTL。要訪問我使用l.front()l.back()。這兩種方法都返回引用。我將一個列表的內容複製到其他列表中,因此不想參考。由於這些方法正在返回引用,所以我想知道是否有其他方法可以將引用轉換爲值?我只會收到價值而不是參考。將變量引用轉換爲值?

int main() 
{ 

    list<int> l; 
    l.push_back(2); 
    l.push_back(5); 
    l.push_back(7); 
    l.push_back(9); 

    while(! l.empty()) 
    { 
     cout<<l.front()<<endl; 
     l.pop_front(); 
    } 

    list<int> l1; 
    l1.push_back(10); 
    l1.push_back(15); 
    l1.push_back(30); 


    l.push_back(l1.front()); // here I need value not reference. 


    system("pause"); 
    return 0; 
} 
+0

你運行或調試這個來看結果嗎? – Claudiordgz

+0

您會收到一個引用,但'push_back'函數完全採用,所以沒有問題。 – 2014-03-26 19:22:00

+0

是的。列表'l'現在只有10個。 – user3461957

回答

1

你確實會得到價值

l.push_back(l1.front()); // here I need value not reference 

因爲l1.front()參考值將被用於創建列表l的元素。 沒有任何必要創建任何中間臨時對象,僅獲得目標值。:)

試試這個簡單的例子

#include <iostream> 
#include <list> 
#include <cstdlib> 


int main() 
{ 
    std::list<int> l; 

    std::list<int> l1; 

    l1.push_back(10); 
    l1.push_back(15); 
    l1.push_back(30); 

    l.push_back(l1.front()); 

    for (int x : l1) std::cout << x << ' '; 
    std::cout << std::endl; 

    for (int x : l) std::cout << x << ' '; 
    std::cout << std::endl; 

    std::system("pause"); 

    return 0; 
} 

正如你將看到每個列表中包含了自己的元素與值10 。

0

看一看std::list::push_back。有兩個版本採用不同的輸入參數:

  1. const T& value:新元素被初始化爲值的副本。
  2. T&& value:值被移動到新的元素

在你的情況,l1.front()是一個左值參考T&,因此版本1的選擇和值複製,這​​是你想要的。