【问题标题】:reverse_iterator and iterator abstraction in a variable变量中的 reverse_iterator 和迭代器抽象
【发布时间】:2023-03-29 17:06:01
【问题描述】:

我有一个方法应该根据条件向前或向后迭代map。操作本身独立于方向,因此我希望能够做这样的事情:

std::map<int, int> some_map;
auto iter = some_condition ? some_map.begin() : some_map.rbegin();
for (; iter != some_condition ? some_map.end() : some_map.rend(); ++iter)
{
    //something to do with *iter
}

我知道我应该可以使用模板函数来做到这一点(对吗?),但这似乎有点矫枉过正。

有没有一种方法可以在没有模板的情况下在一个函数中完成?也许使用&lt;algorithm&gt;

【问题讨论】:

  • &lt;algorithm&gt; 中,您有模板。
  • @LogicStuff 我知道这一点,但我不必编写它们 - 只是一个 lambda,在这种情况下我会认为它更清晰(可读性)
  • 你可以看到this并阅读示例,他们使用迭代器。
  • @AlejandroCortes ??

标签: c++ iterator reverse-iterator


【解决方案1】:

这样做的一种方法是首先考虑你想对每个元素做什么,比如说

auto f = [](const std::pair<int, int> &p) { std::cout << p.first << std::endl; };

那你就可以分方向了:

if(forward)
    std::for_each(std::begin(m), std::end(m), f);
else
    std::for_each(std::rbegin(m), std::rend(m), f);

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 2012-09-14
    • 2021-12-17
    • 2016-05-26
    • 2010-12-19
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多