错误 C2676:std::set::const_iterator 没有 operator+ 函数?

Error C2676: std::set::const_iterator doesn't have operator+ function?

std::set<int> s = { 1,2,3,4,5 };
std::set<int> s2(s.begin(), s.begin() + 2);

我想将 s 的几个值赋给 s2。但是出现以下编译错误:

Error C2676 binary '+': 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' does not define this operator or a conversion to a type acceptable to the predefined

好像std::set::const_iterator没有operator+方法。

sets 通常被实现为树而不是连续的数据存储。对于一棵树,您只能从前一项中找到一个包含的项,并且必须一次迭代一个,这使得 + 运算符不是很有效。结果他们只提供 Bi-Directional Iterators

要获得有效的 operator+ 您需要一个可以提供 Random Access Iterators

的容器

It seems std::set::const_iterator doesn't have operator+ method.

你说得对。

s.begin() + 2 等操作仅适用于 random access iterators(请参阅 Expression link). 但是,std::set has only bidirectional iteratorstd::set::iteratorstd::set::const_iterator)。


但是,您可以使用 std::next 以通用方式完成这项工作,returns 我们传递的迭代器的第 n 个后继者。

#include <iterator>  // std::next

std::set<int> s2(s.begin(), std::next(s.begin(), 2));
// or const_iterator    
std::set<int> s3(s.cbegin(), std::next(s.cbegin(), 2));