/ * [以下代码中的操作将永远运行,我应该进行哪些编辑才能获得连续的set元素之间所需的差异?] * /
包括
使用命名空间std;
int main(){
int temp;
set <int> sett ;
set <int>:: iterator itr;
int n=5 ;
itr= sett.begin();
for (int i=0;i<n ; i++){
cin>> temp ;
sett.insert(temp);
}
for( itr = sett.begin();itr!=sett.end();itr++){
if(itr!=sett.end()){
cout << (*itr++)-(*itr) << " difference"<< endl ;
}
}
return 0;
}
最佳答案
是。
这里的问题是您将迭代器增加了两次,因此您跳过了元素。此外,如果迭代器到最后一个元素,您最终将通过迭代器间接经过最后一个元素(即结束迭代器)。
实际上,有一个标准算法。它的名称通常被认为是令人困惑的,但是在这种用例中,它实际上是相当合适的。符合std::adjacent_difference
:
std::adjacent_difference(std::begin(sett), std::end(sett),
std::ostream_iterator<int>(std::cout, " difference\n"));