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

时间:2019-04-10 21:07:15

标签: c++ vector queue iteration

我的向量按升序存储某个图形的顶点数。我想将这些数字添加到队列中,以便稍后在代码中运行BFS,但是我不知道如何以一种好又快的方式进行操作。我希望所有人都能阅读清楚的解决方案,而我认为附带的内容是晦涩难懂的。 免责声明-我使用静态强制类型转换,因为在使用Qt时我讨厌看到警告。这是做什么的:

使用Casual 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()在内的所有元素的类似“反向复制”功能的东西吗?

1 个答案:

答案 0 :(得分:2)

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); });