在下面的代码我无法识别--it和之间的区别it-1.同样是words.end()值超出设定范围?
#include <iostream>
#include<set>
using namespace std;
int main()
{
set<string> words;
words.insert("test");
words.insert("crack");
words.insert("zluffy");
set<string>::iterator it=words.end();
cout<<*(--it)<<endl;//just works fine
cout<<*(it-1)<<endl;//Error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那是因为std::set::iterator是一个恒定的BidrectionalIterator.这意味着它支持++it和--it.然而,这是不是一个RandomAccessIterator的(像std::vector::iterator) -这是它需要是支持it + n和it - n.
虽然--it并且在it -= 1声明上做同样的事情,后者需要比std::set提供更多的功能.这就是为什么它不受支持.你总是可以使用:std::prev(it, 1),这可以在任何满足BidirectionalIterator概念的迭代器上工作.