0

我们正在开发一个自定义 List 类。我们正在尝试实现迭代器和 const_iterator 及其函数,但我们的 ++ 运算符有问题。PostFix 根本不起作用,当我们走得太远时 PreFix 会给我们段错误(当前代码是一种解决方法,它只返回最后一个有效结果)。问题1:我们如何在不返回最后一个有效元素的情况下修复与前缀相关的段错误?(我们已经尝试返回 nullptr)。

Postfix 只是不会迭代,即使我们遵循了互联网上的每一个指南 <.<

问题 2:为什么 PostFix 不起作用?

后缀代码:

List_const_iterator_& operator++()
  {
    if(ptr->next_ != nullptr)
    {
        ptr = ptr->next_;
        return *this;
    }
    else
        return *this;
  }

  List_const_iterator_ operator++(int unused)
  {
    List_const_iterator_ temp(*this);
    if(ptr->next_ != nullptr)
    {
      ptr = ptr->next_;
      return temp;
    }
    else
      return *this;
  }

测试代码(带有后缀的atm):

List<int> list1 {324, 2, 3};
  List_const_iterator_<int> clst = list1.cbegin();
  clst = clst++;
  cout << "val: " << clst.ptr->data_ << endl;
  clst = clst++;
  cout << "val2: " << clst.ptr->data_ << endl;
 clst = clst++;
  cout << "val3: " << clst.ptr->data_ << endl;

后缀的输出:

val: 324
val2: 324
val3: 324

前缀的输出:

val: 2
val2: 3
val3: 3  <-- This is where we segfault if we don't use the controll.
4

1 回答 1

2

尝试一下:

clst++;

代替 :

clst = clst++;

后者重置clst为其原始值(好像没有发生增量)。

于 2014-04-10T09:17:40.857 回答