我正在创建函数,它接受一个运算符向量(不同的矩阵)。可以以不同的顺序(从最小到最大或以其他方式)提供操作员。
我需要根据排序
创建for循环for(auto tr = operators.begin(); tr != operators.end() ; ++tr )
或
for(auto tr = operators.end(); tr != operators.begin() ; --tr )
循环内容保持不变
有什么方法可以自动执行此操作吗?也许基于一些帮助输入参数?
答案 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()
。