c++ - 如何迭代一堆地图:std::stack< std::map>?
问题描述
我有一个遍历地图堆栈的 for 循环,但是当我执行代码时出现分段错误。我的代码是这样的:
// std::stack< std::map<string, string> > STACK;
size_t getStackSize() { return this->STACK.size();}
std::stack< std::map<string, string> > getSTACK() { return this->STACK;}
for (size_t i = 0; i < ObjSTACK.getStackSize(); ++i )
{
for (auto& [v, l] : ObjSTACK.getSTACK().top())
{
std::cout << v << ':' << l << '\n';
}
ObjSTACK.getSTACK().pop();
}
为什么我得到分段错误?有没有更好的方法来迭代 std::stack< std::map<string, string>> ?
解决方案
getStack()
每次调用它时都返回一个副本,因此std::stack
while (!ObjSTACK.getSTACK().empty())
充其量是非常低效的,但是
ObjSTACK.getSTACK().pop();
将是无操作的,因为您是从 temp 弹出的std::stack
,而不是原始的。因此getStackSize()
不会改变值,并且外循环将永远运行。
改为getStack()
返回一个引用,以便循环可以实际修改std::stack
:
std::stack< std::map<string, string> >& getSTACK() { return this->STACK; }
推荐阅读
- azure-devops - 重定向到 DefaultCollection 以外的集合
- android - 如何防止 StaggeredGridLayout Manager 重新排序 RecyclerView 项目?
- javascript - 如何遍历 firebase get 的结果
- python - RegEx 用于匹配两位数和除新行和点之外的所有内容
- awk - AWK:显示 2 列 2 个文件,其中第二列具有唯一数据
- c# - 从两个线程写入一个txt文件
- termios - 启动 localstack 失败 - 缺少 termios
- android - 如何在应用程序关闭时的特定时间启动应用程序
- excel - 在 MATLAB 中使用 xlswrite
- arrays - 如何制作一个函数来知道不相交的集合数组是否代表单个分区?