c++ - 如何以相反的顺序将整个向量复制到队列中?
问题描述
我的向量按升序存储某个图的顶点数。我想将这些数字添加到队列中,以便稍后在代码中运行 BFS,但我不知道如何以又快又好的方式做到这一点。我希望每个人都能清楚地阅读该解决方案,而我所提出的解决方案在我看来是晦涩难懂的。免责声明 - 我使用静态强制转换,因为我讨厌在使用 Qt 时看到警告。这是做了什么:
使用随意的 for 循环以相反的顺序遍历从equalssize-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
提供函数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); });
推荐阅读
- pyqt - 使 QTableWidgetItem 不可编辑,但仍然可以选择字符串的一部分
- node.js - 如何删除本地安装的 npx 命令版本?
- powershell - 使用日志文件 ping 服务器的预定脚本
- javascript - 从任何 web 应用程序调用时,Window exe API cors 问题。C++
- python - 如果字段不存在,则更新 MongoDB 文档
- firebase - Flutter Firestorage getDownloadUrl() 返回 NoSuchMethodError
- css - 如何删除元素并用空格代替显示:vuetify中的无
- python - heroku 在 python 中打开应用程序到系统
- c# - Unity C# 变量在 OnCollisionEnter 中不起作用
- visual-studio-code - 如何克服 vs 代码拒绝更改为我选择的字体的问题?