我的向量按升序存储某个图形的顶点数。我想将这些数字添加到队列中,以便稍后在代码中运行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()
在内的所有元素的类似“反向复制”功能的东西吗?
答案 0 :(得分:2)
std::vector
提供函数rbegin
和rend
,这些函数返回反向迭代器,您可以使用它们从后向前进行迭代。使用它们,您可以使用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); });