错误 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+
方法。
set
s 通常被实现为树而不是连续的数据存储。对于一棵树,您只能从前一项中找到一个包含的项,并且必须一次迭代一个,这使得 + 运算符不是很有效。结果他们只提供 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 iterator(std::set::iterator
和 std::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));
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+
方法。
set
s 通常被实现为树而不是连续的数据存储。对于一棵树,您只能从前一项中找到一个包含的项,并且必须一次迭代一个,这使得 + 运算符不是很有效。结果他们只提供 Bi-Directional Iterators。
要获得有效的 operator+
您需要一个可以提供 Random Access Iterators
It seems
std::set::const_iterator
doesn't haveoperator+
method.
你说得对。
s.begin() + 2
等操作仅适用于 random access iterators(请参阅 Expression link).
但是,std::set
has only bidirectional iterator(std::set::iterator
和 std::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));