错误C2676:std :: set :: const_iterator没有运算符+功能?

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

我想将s的多个值关联到s2中。但是出现了以下编译错误:

错误C2676二进制'+': 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>' 没有定义此运算符或未转换为可接受的类型 预定义

似乎std::set::const_iterator没有operator+方法。

qq845402721 回答:错误C2676:std :: set :: const_iterator没有运算符+功能?

似乎std::set::const_iterator没有operator+方法。

您是对的。

s.begin() + 2之类的操作仅适用于 random access iterators (请参见链接中的 Expression )。 但是,std::set仅具有 bidirectional iterator std::set::iteratorstd::set::const_iterator)。


但是,您可以使用std::next以通用方式完成此工作,该方法将返回我们传递的第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));
,

set通常实现为树而不是连续的数据存储。用一棵树,您只能从进行中的项目中找到一个包含的项目,并且必须一次迭代一个项目,这使得+运算符不太有效。结果,它们仅提供Bi-Directional Iterators

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

的容器
本文链接:https://www.f2er.com/2827042.html

大家都在问