为什么不能添加带有整数的迭代器?

问题描述 投票:1回答:2

我想通过迭代器打印集合的所有值。打印完所有值后,我想打印不带最后一个的endl。这是我的代码:

for (set<string> :: iterator it = str_set.begin();it!=str_set.end(); it++)
{
     cout<<*it;
     if((it+1)!=str_set.end())  //here I got error ...
     cout<<endl;
}

但是在检查if((it+1)!=str_set.end())时出现错误。这是怎么了?

这里是错误消息:

error: no match for ‘operator+’ (operand types are ‘std::set<std::__cxx11::basic_string<char> >::iterator’ {aka std::_Rb_tree_const_iterator<std::__cxx11::basic_string<char> >’} and ‘int’)
   92 |         if(it+1!=str_set.end())
      |            ~~^~
      |            |  |
      |            |  int
      |            std::set<std::__cxx11::basic_string<char> >::iterator {aka std::_Rb_tree_const_iterator<std::__cxx11::basic_string<char> >}
c++ stl
2个回答
2
投票

std::set::iterator没有std::set::iterator。您只能对其进行递增和递减(1):


1
投票

begin() s个迭代器是双向的。这意味着您可以增加和减少它们,但不能对其进行广义加法。为此,您需要“随机访问”迭代器。

© www.soinside.com 2019 - 2024. All rights reserved.