C++ C++;:将STL容器中的元素移动到单个语句中的变量中?
使用std::list考虑以下语句序列C++ C++;:将STL容器中的元素移动到单个语句中的变量中?,c++,stl,C++,Stl,使用std::list考虑以下语句序列 //class C; C c_obj; std::list<C> my_list; //... std::swap(c_obj, my_list.front()); my_list.pop_front(); //C类; C C_obj; std::列出我的清单; //... std::swap(c_obj,my_list.front()); 我的列表。pop_front(); 我只想将我的_list.front()的内容移动到c_ob
//class C;
C c_obj;
std::list<C> my_list;
//...
std::swap(c_obj, my_list.front());
my_list.pop_front();
//C类;
C C_obj;
std::列出我的清单;
//...
std::swap(c_obj,my_list.front());
我的列表。pop_front();
我只想将我的_list.front()的内容移动到c_obj,同时在一条语句中从列表中删除元素(从而最小化语句和复制的数量)。可能吗
谢谢。我真的不认为有什么内置的东西可以帮你做到这一点。您可以编写自己的函数进行复制,然后弹出。如果您知道不太可能将该函数用于其他许多用途,那么可以将其设置为lambda表达式,以便它实际上只是一条语句,伪装为匿名函数调用
或者,您可以创建一个新列表,然后使用splice一次传输一个元素,确保没有超出范围,然后只处理迭代器到新列表中的元素 创建一个返回弹出值的函数并使用:
C&pop\u前端(标准::列表和续){
C&C(续前页());
续前弹出按钮();
返回c;
}
int main(){
C C_obj;
std::列出我的清单;
我的列表。安置前方();
标准::交换(c_obj,pop_front(my_list));
}
如果在复制和删除之间存在异常情况?不,我不认为有办法在同一表达式中获得front()
和pop\u front()
。至少不在std::列表中谢谢你提到std::交换。我不知道这件事。你的方法似乎不错。谢谢
C& pop_front(std::list<C>& cont) {
C& c(cont.front());
cont.pop_front();
return c;
}
int main() {
C c_obj;
std::list<C> my_list;
my_list.emplace_front();
std::exchange(c_obj, pop_front(my_list));
}