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;
}
}