C ++迭代器如何实现next()和previous()函数

时间:2017-07-22 18:04:53

标签: c++ c++11 stdvector

我正在编写一个包含事物向量的实用程序类。我想为调用者类提供访问器导航功能。例如,

class MyIterator {

public:
  typedef std::vector<someObj>::iterator itr;

  itr next() { return things_.begin(); }
  itr next(itr) { return std::next(itr); }

private:
  std::vector<someObj> things_;
}

我在这里有两个问题:

  • 这是正确的方法,还是任何简单的方法?对于使用和不使用itr重载下一个(),我不是特别舒服。
  • 在这种情况下,调用者如何检测迭代结束?调用者无法访问vector,因此无法调用v.end()。那么,我应该为这张支票提供另一个fn吗?如果是这样,那看起来就是一种矫枉过正。

当然,我在这里错过了一些东西......

1 个答案:

答案 0 :(得分:1)

你做得不对。您真正需要导出的是begin()和end()。

#create limited data
x<-c(0,  1.1, 1.4, 1.7)
y<-c(0.06, 0.115, 0.115, 0.125)

plot(y~x)
model<-lm(y~x)
#plot a linear fit
  abline(model, col="blue")
  print(summary(model))

#model with the square of x
#  I() inhibit interpretation see help(I) for more information
  modelsr<-lm(y~I(sqrt(x)))
  print(summary(modelsr))

#generate the data to the model
  xbar<-seq(0, 1.7, 0.03)
  ybar<-modelsr$coefficients[1]+sqrt(xbar)*modelsr$coefficients[2]
#plot model
lines(y=ybar, x=xbar, pch=19, col="green")