提问人:Asif Azad 提问时间:7/18/2020 最后编辑:songyuanyaoAsif Azad 更新时间:7/19/2020 访问量:693
在 C++ 中设置迭代器
Set Iterators in C++
问:
可以在 c++ 中为集合 stl 减去迭代器吗?就像在矢量中是可能的一样......
int32_t main()
{
set<int> s = {1, 3, 0, 23};
vector<int> v = {1, 3, 0, 23};
int vind = find(v.begin(), v.end(), 1) - v.begin(); //This is ok with no error
int sind = find(s.begin(), s.end(), 1) - s.begin(); //But this gives error
cout<<vind <<" " << sind;
return 0;
}
我无法弄清楚原因。为什么在集合中是不可能的??
答:
4赞
songyuanyao
7/18/2020
#1
的迭代器是 BidirectionalIterator,它不支持迭代器之间。(的迭代器是 RandomAccessIterator,它支持这一点。std::set
operator-
std::vector
您可以改用 std::d istance
。(请注意,InputIterator(包括 BidirectionalIterator)的复杂度是线性的。
int sind = std::distance(s.begin(), find(s.begin(), s.end(), 1));
评论
sind = std::distance(find(s.begin(), s.end(), 1), s.begin());