gpt4 book ai didi

c++ - 如何以相反的顺序将整个 vector 复制到队列中?

转载 作者:行者123 更新时间:2023-11-28 01:22:09 25 4
gpt4 key购买 nike

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

使用随意的 for 循环以相反的顺序迭代以 size-1 开始的 vector ,当 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迭代 vector ,然后使用 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); });

关于c++ - 如何以相反的顺序将整个 vector 复制到队列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com