gpt4 book ai didi

c++ - 迭代器 for 循环不会确认循环完成条件

转载 作者:行者123 更新时间:2023-11-28 01:44:43 26 4
gpt4 key购买 nike

这是我的程序片段,它采用整数列表 A、多个查询 Q(列表中要排序的一系列范围)和索引 k。该列表根据查询进行排序,然后打印出第 k 个索引。

具体来说:

  • 整数列表是 [8,5,3,9,2,4,3,1,9,7]
  • 查询列表是[(0,1),(3,4),(0,4)]
  • 索引k为3

从 (0,1) 排序 A,然后是 (3,4),最后是 (0,4) 给出整数的最终列表 [2,3,5,8,9,4,3,1,9 ,7] 其中第 k 个索引是 8,并打印出这个数字。

在对整数范围进行排序后,记录该范围以避免不必要地多次对同一范围进行排序。这些记录的范围存储在变量 sortedSegments 中。

在根据查询对 A 进行排序之前,for 循环将遍历 sortedSegments 以查看用于对 A 进行排序的新范围是否已经排序。问题是 for 循环在遍历所有 sortedSegments 之后应该退出时却没有退出。

我无法弄清楚它不会退出循环的原因,所以我想我会把它贴在这里,以便有人可以指出我不可避免的明显错误:

    typedef vector<pair<int,int>>   pairVec;

bool hasOverlappingRange(pair<int,int> r1, pair<int,int> r2) {
return (r1.first)<=(r2.second) && (r1.second)>=(r2.first);
}

pairVec sortedSegments;

pairVec::iterator sit = sortedSegments.begin();
for(sit; sit!=sortedSegments.end(); ++it)
{ // iterate through the known ordered segments, check if query overlaps one.
if(hasOverlappingRange( {lowIdx,highIdx} , *sit)){
sortPortion(a, {lowIdx, highIdx}, *sit);
segmentSorted = true;
}
// This is where the program breaks
}

if (!segmentSorted) {
sortPortion(a, {lowIdx,highIdx},{-1,-1});
sortedSegments.push_back( {lowIdx,highIdx} );
}

我在整个代码中插入了打印行来观察程序的执行,在运行这个冗长版本的代码后,输出是:

Pre-sort  A:  8 5 3 9 2 4 3 1 9 7 Segments: [] This Q: (0,1)
done checking all sorted segments
seg not sorted yet
uP: 5 sP: 8
seg sorted
new idx pushed onto segments
Post-sort A: 5 8 3 9 2 4 3 1 9 7 Segments: [ (0, 1)]

Pre-sort A: 5 8 3 9 2 4 3 1 9 7 Segments: [ (0, 1)] This Q: (3,4)
checking if Q(3,4) overlaps (0,1)
no overlapping region here

但是程序永远不会完成,并且在应该退出 for 循环时程序失败了。我通过手动递增迭代器来测试退出条件,它会被循环本身递增,并检查迭代器是否等于它所做的 sortedSegments.end()。

最佳答案

    for(sit; sit!=sortedSegments.end(); ++it) 

您实际上并没有迭代坐下。你的迭代变量是我猜是错字

关于c++ - 迭代器 for 循环不会确认循环完成条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45626737/

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