Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:将STL容器中的元素移动到单个语句中的变量中?_C++_Stl - Fatal编程技术网

C++ C++;:将STL容器中的元素移动到单个语句中的变量中?

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

使用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_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));
}