如何以相反的顺序将整个向量复制到队列中

How to copy whole vector into queue in reversed order?

本文关键字:向量 复制 队列 顺序      更新时间:2023-10-16

我的向量按升序存储某个图的顶点数。我想将这些数字添加到队列中,以便稍后在代码中运行 BFS,但我不知道如何以漂亮和快速的方式做到这一点。我希望解决方案清晰,每个人都可以阅读,在我看来,我带来的东西是晦涩难懂的。免责声明 - 我使用静态转换,因为我讨厌在使用Qt时看到警告。以下是所做的事情:

使用休闲 for 循环以相反的顺序遍历向量,从 size-1 开始,到 i 等于 -1 时结束。因为我使用-1作为规则,所以我需要将所有内容都投射到int上,这使得代码变得丑陋。

vector<unsigned> v;
v.pushback(2);
v.pushback(3);
v.pushback(5);
queue<unsigned> q;
for(int i = static_cast<int>(v.size()-1); i>=0; i--)
    q.push(v[static_cast<unsigned>(i)];

有人可以告诉我专业人士是如何做到的吗?找不到类似"反向顺序复制"功能的东西,可以从.end()-1元素开始并复制包括.begin()元素在内的所有元素?

std::vector提供了函数rbeginrend,这些函数返回可用于从后到前迭代的反向迭代器。 使用这些元素,您可以使用std::for_each迭代向量,然后使用 lambda 作为函子将每个元素推送到队列中。 那看起来像

std::vector<int> v = {1, 2, 3};
std::queue<int> q;
std::for_each(v.rbegin(), v.rend(), [&q](auto el){ q.push(el); });