我正在使用list
中的STL
。要访问,我使用了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 :(得分: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的元素。
答案 1 :(得分:0)
看看std::list::push_back。有两个版本采用不同的输入参数:
const T& value
:新元素初始化为值的副本。T&& value
:将值移入新元素在您的情况下,l1.front()
是左值引用T&
,因此选择版本1并复制值,这就是您想要的。