/ * [以下代码中的操作将永远运行,我应该进行哪些编辑才能获得连续的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;
}
在C ++中,可以使用集合的迭代器来查找集合的两个连续元素之间的差异吗?
是。
for( itr = sett.begin();itr!=sett.end();itr++){ // ^^^^^ if(itr!=sett.end()){ cout << (*itr++)-(*itr) << " difference"<< endl ; // ^^^^^
这里的问题是您将迭代器增加了两次,因此跳过了元素。此外,对于迭代器到最后一个元素的情况,您最终将通过迭代器间接经过最后一个元素(即,结束迭代器)。
实际上,有一个标准算法。它的名称通常被认为是令人困惑的,但是在这种用例中,它实际上是相当合适的。相约std::adjacent_difference
:
std::adjacent_difference(std::begin(sett), std::end(sett),
std::ostream_iterator<int>(std::cout, " difference\n"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句