【发布时间】:2019-09-13 17:55:33
【问题描述】:
我尝试使用向量来实现阶乘。结果假定附加vector<int> Res
//corrected
vector<int> Res;
vector<int> Fact;
for(int i=1; i!=4; i++)
Fact.push_back(i);
int result=1;
for (auto i = Fact.rbegin(), auto e= Fact.rend(); i != e; ++i)
result *= *i;
Res.push_back(result);
问题出在迭代器上。例外:不能取消引用超出范围的向量迭代器。
我不明白什么是迭代器超出范围? Beg 和 End 是在填写 Fact 后定义的。所以有什么问题?我只是初学者,我一定错过了这个主题的一些重要细节)
【问题讨论】:
-
你们都减去
End并从中减去i。也许你的意思是*(End-1)。 -
不,我的意思是 *(End-i) 到达 for( ;End != Beg; End--) 的结尾。
-
但你也可以
End--。你在重复计算。而且*(End-i)本身不会减少End,因此您的条件不需要达到true。 -
我认为你最好使用
rbegin。 -
@SergeyA 比较迭代器和反向迭代器需要多一步:stackoverflow.com/a/15203045/3365922