0

有没有办法将 C++ STL 双端队列转换为堆栈,反之亦然,而无需手动迭代源的每个元素?(我不确定其中一个<cast>是否可以在这里使用。)

4

1 回答 1

1

stack只是一个容器适配器,因此您可以将deque对象传递给它以将其用作容器:

std::deque<int> my_deque;
// Do something with deque here
std::stack<int> s(my_deque);

要在其他方向进行隐蔽,您可以将构造函数与迭代器一起使用:

我不确定您是否可以进行直接转换,反之亦然(my_deque直接使用除外)。我能想到的只有以下几点:

std::deque<int> other_deck;
// Construct new stack:
std::stack<int> new_stack(other_deck);
// use std::swap
std::swap(new_stack, old_stack);

现在other_deck应该用 from 填充old_stack

将容器适配器的内容与其他的内容交换。有效调用using std::swap; swap(c, other.c);

编辑这似乎swap只是交换底层容器,而不是容器的内容,所以这不起作用。

于 2013-09-18T16:10:04.913 回答