首页 > 解决方案 > 如何以相反的顺序将整个向量复制到队列中?

问题描述

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

使用随意的 for 循环以相反的顺序遍历从equalssize-1开始的向量。因为我按照规则使用,所以我需要将所有使代码难看的东西都放在上面。i-1-1int

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()一个?

标签: c++vectorqueueiteration

解决方案


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

推荐阅读