C++ 逆迭代器算法

C++ 逆迭代器算法,c++,stl,C++,Stl,总之,我试图在列表中的元素之间进行O(n^2)的反向比较,所以我使用了一个反向迭代器 代码如下 #include <list> struct Element { double a; double b; }; typedef std::list<Element> ElementList; class DoStuff { public: DoStuff(); void removeDuplicates(ElementList & incList) c

总之,我试图在列表中的元素之间进行O(n^2)的反向比较,所以我使用了一个反向迭代器

代码如下

#include <list>

struct Element {
 double a;
 double b;
};
typedef std::list<Element> ElementList;

class DoStuff {
public:
  DoStuff();

  void removeDuplicates(ElementList & incList) const {
     for(ElementList::reverse_iterator stackIter = incList.rbegin(); stackIter != incList.rend(); ++stackIter) {
        bool uniqueElement = true;
        for(ElementList::reverse_iterator searchIter = stackIter+1; searchIter != incList.rend() && uniqueElement; ++searchIter) {
            //Check stuff and make uniqueElement = true;
         } 
     }
  }
};

int main() {
  std::list<Element> fullList;

  DoStuff foo;
  foo.removeDuplicates(fullList);
}

错误如下:

In file included from /usr/local/include/c++/6.1.0/bits/stl_algobase.h:67:0,
                 from /usr/local/include/c++/6.1.0/list:60,
                 from main.cpp:1:
/usr/local/include/c++/6.1.0/bits/stl_iterator.h: In instantiation of 'std::reverse_iterator<_Iterator> std::reverse_iterator<_Iterator>::operator+(std::reverse_iterator<_Iterator>::difference_type) const [with _Iterator = std::_List_iterator<Element>; std::reverse_iterator<_Iterator>::difference_type = long int]':
main.cpp:16:66:   required from here
/usr/local/include/c++/6.1.0/bits/stl_iterator.h:233:41: error: no match for 'operator-' (operand types are 'const std::_List_iterator<Element>' and 'std::reverse_iterator<std::_List_iterator<Element> >::difference_type {aka long int}')
       { return reverse_iterator(current - __n); }
在/usr/local/include/c++/6.1.0/bits/stl_algobase.h:67:0中包含的文件中,
从/usr/local/include/c++/6.1.0/list:60,
来自main.cpp:1:
/usr/local/include/c++/6.1.0/bits/stl_iterator.h:std::reverse_iterator std::reverse_iterator::operator+(std::reverse_iterator::difference_type)const的实例化[with _iterator=std:_List_iterator;std::reverse_iterator::difference_type=long int]:
main.cpp:16:66:此处为必填项
/usr/local/include/c++/6.1.0/bits/stl_迭代器。h:233:41:错误:与“operator-”不匹配(操作数类型为“const std::_List_iterator”和“std::reverse_iterator::difference_type{aka long int}”)
{返回反向迭代器(当前-u n);}

对于某些迭代器
it
和整数
n
的语法
it+n
要求迭代器是“随机访问迭代器”。列表迭代器不满足该要求

要避开“愚蠢的阅读”问题,您可以使用:

或者,少打字:

for(auto searchIter = std::next(stackIter); ...

某些迭代器
it
和整数
n
的语法
it+n
要求迭代器是“随机访问迭代器”。列表迭代器不满足该要求

要避开“愚蠢的阅读”问题,您可以使用:

或者,少打字:

for(auto searchIter = std::next(stackIter); ...

错误是什么?错误是什么?遗憾的是,我不被允许使用C++11,因为[修订]。。。但这是非常直观的。谢谢@康斯坦丁,不客气。自己实施
next
应该不会太难遗憾的是,我不被允许使用C++11,因为[修订]。。。但这是非常直观的。谢谢@康斯坦丁,不客气。自己实施
next
应该不会太难
for(auto searchIter = std::next(stackIter); ...