enumerate

题目描述

实现函数 enumerate(container, start)。它返回一个范围,每次迭代都得到一个“对子”,其 first 是从 start 开始的递增计数,而 second 则是 container 中的逐个元素。例如,enumerate({a, b, c}, 5) 的结果是范围 {(5, a), (6, b), (7, c)}start 的默认值为 0。

关于输入

无。

关于输出

见样例输出。

参考答案

#include <iostream>
#include <vector>
#include <set>
#include <utility>

using Pair = std::pair<int, int>;

template <typename C>
std::vector<Pair> enumerate(const C& c, int start = 0) {
    std::vector<Pair> r;
    for (auto e : c) {
        r.push_back({start++, e});
    }
    return r;
}

int main() {
    int array[]{1, 2, 3, 4, 5};
    for (auto p : enumerate(array)) {
        std::cout << "a[" << p.first << "] = " << p.second << std::endl;
    }
    for (auto p : enumerate(std::vector{2, 4, 6, 7, 8}, 1)) {
        std::cout << p.first << " " << p.second << std::endl;
    }
    std::set powers{2, 4, 32, 8, 16, 1};
    for (auto p : enumerate(powers)) {
        std::cout << "2^" << p.first << " = " << p.second << std::endl;
    }
}