/ * [以下代码中的操作将永远运行,我应该进行哪些编辑才能获得连续的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"));

10-01 14:41