在一个代码中for循环的不同迭代器

时间:2016-04-16 00:26:35

标签: c++ for-loop indexing iterator

我正在创建函数,它接受一个运算符向量(不同的矩阵)。可以以不同的顺序(从最小到最大或以其他方式)提供操作员。

我需要根据排序

创建for循环
for(auto tr = operators.begin(); tr != operators.end() ; ++tr )

 for(auto tr = operators.end(); tr != operators.begin() ; --tr )
  • 循环内容保持不变

  • 有什么方法可以自动执行此操作吗?也许基于一些帮助输入参数?

2 个答案:

答案 0 :(得分:1)

您可以通过让函数使用一对迭代器("范围")而不是完整的矩阵或向量来支持这一点。例如:

template <typename Iterator>
void print(Iterator begin, Iterator end) {
    for(auto tr = begin; tr != end; ++tr)
        ; // ...
}

这样,您可以传递任何类型的范围:前进,后退或其他。这就是设计STL的程度。

例如,如果您使用std::vector,则可以像这样调用上述内容:

std::vector<int> vec;
print(vec.begin(), vec.end()); // forward
print(vec.rbegin(), vec.rend()); // reverse

答案 1 :(得分:1)

虽然从技术上讲,end()迭代器通常可以安全地减少和解除引用,但是你依赖于并非所有迭代器都能保证具有的特定属性。

许多标准容器[某些在C ++ 11中引入的容器]都没有前向迭代器(按顺序迭代元素)和反向迭代器(以相反的顺序迭代元素)。 begin()end()的对应部分分别为rbegin()rend()