我想检查一个迭代器(或类似的类型)是否在另一个迭代器之前。在这个例子中,我想检查一下我是否有无限循环。这意味着,"如果我在开始时应用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());
答案 0 :(得分:7)
如果您有随机访问迭代器,例如您可以从std::vector
,std::basic_string
,std::deque
或std::array
获取,并且您知道它们来自同一个容器,然后您可以将它们与operator<
(或任何其他关系运算符)进行比较。否则,您需要记录函数的行为并依靠用户来传递符合条件的有效迭代器。