如何在c++中使用rbegin()和advance(iterator,1)在列表中添加两个值?

How can I add two values in a list in C++ using rbegin() and advance(iterator,1)?

本文关键字:添加 列表 两个 c++ rbegin advance iterator      更新时间:2023-10-16

我正在尝试使用c++中的列表计算斐波那契数列,按照指示。我留下了如何改进它的笔记,我根本不明白我被要求做什么。我如何使用rbegin()和advance(iterator,1)来添加以前的值并计算一个新的值?

这是我之前写的。

列表mutableFibonacci(int position){

list<int> series;
int first = 0; //Remove
int second = 1; //Remove
for (int i = 1; i <= position; i++)
{
    if (i == 1)
        series.push_back(1);
    else
    {                                   
      //We can get the last value and the value before from the series, like      so, series.rbegin();  then get the value from the reverse iterator. Then we can call advance(iterator, 1) to get to the previous value. We can get the second to last value.
        series.push_back(first + second);
        first = second;
        second = series.back();
    }
}
return series;

}

这是我试图做的修复它。

for (int i = 1; i <= position; i++)
{
    if (i == 1)
        series.push_back(1);
    else
    {                                   

        int last = series.rbegin();
        int previous = advance(series, 1);
        series.push_back(last + previous);
    }
}
return series;
 series.push_back(1);
 series.push_back(1);
 for (int i = 3; i <= position; ++i){                     //First 2 elements inititalised
    list<int>::reverse_iterator it = series.rbegin();     //End of the list
    list<int>::reverse_iterator it2 = it;                 //Copy the iterator
    advance(it2,1);                                       //Move the iterator
    series.push_back(*(it)+*(it2));                       //Add the sum
}

如果没有int,它看起来像这样。前面的auto是c++ 11定义变量类型的快捷方式(因此,不必键入list<int>::reverse_iterator,可以键入auto)

首先你的初始化是不正确的,你需要初始化至少2个元素,否则std::advance()会有未定义的行为:

if (i < 3)
    series.push_back(1);

rbegin()将给出迭代器(在这种情况下是反向迭代器),而不是int,后者在语义上表现得像指针:

list<int>::reverse_iterator it = series.rbegin();
int last = *it;
std::advance( it, 1 );
series.push_back( last + *it );

不确定,为什么推荐std::advance(), std::next()更适合这里