检查迭代器是否在另一个迭代器之前

时间:2014-10-14 08:00:16

标签: c++ iterator

我想检查一个迭代器(或类似的类型)是否在另一个迭代器之前。在这个例子中,我想检查一下我是否有无限循环。这意味着,"如果我在开始时应用operator ++足够的时间,我到达结束"。在C ++ 98中有可能吗?也许限制类型T?

/**
 * \brief Loop
 * \attention T must implement operator++() and operator!=(const T&)
 * \param begin Begin of the loop
 * \param end End of the loop
 * \pre begin precedes end
 */
template <typename T>
void loop(const T& begin, const T& end)
{
  T run = begin;
  while(run != end)
  {
    /* do something with run */
    ++run;
  }
}

loop(0,10);

std::set<double> x;
x.insert(1.0);
x.insert(2.0);
x.insert(3.0);
loop(x.begin(), x.end());

1 个答案:

答案 0 :(得分:7)

如果您有随机访问迭代器,例如您可以从std::vectorstd::basic_stringstd::dequestd::array获取,并且您知道它们来自同一个容器,然后您可以将它们与operator<(或任何其他关系运算符)进行比较。否则,您需要记录函数的行为并依靠用户来传递符合条件的有效迭代器。