#include <iostream>
template <typename T, int N>
class array {
public:
array() = default;
array(std::initializer_list<T> list) {
std::copy(std::begin(list), std::end(list), data);
}
const T& operator[](int index) const { return data[index]; }
T& operator[](int index) { return data[index]; }
int size() const { return N; }
const T* begin() const { return data; }
T* begin() { return data; }
const T* end() const { return data + N; }
T* end() { return data + N; }
private:
T data[N];
};
int main() {
array<int, 5> a{1, 2, 3, 4, 5};
int res = 0;
for (auto x : a) {
res += x;
}
std::cout << res << std::endl; // 15
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgpjbGFzcyBhcnJheSB7CnB1YmxpYzoKICAgIGFycmF5KCkgPSBkZWZhdWx0OwogICAgYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGxpc3QpIHsKICAgICAgICBzdGQ6OmNvcHkoc3RkOjpiZWdpbihsaXN0KSwgc3RkOjplbmQobGlzdCksIGRhdGEpOwogICAgfQoKICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBkYXRhW2luZGV4XTsgfQogICAgVCYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIHsgcmV0dXJuIGRhdGFbaW5kZXhdOyB9CgogICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBOOyB9CgogICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhOyB9CiAgICBUKiBiZWdpbigpIHsgcmV0dXJuIGRhdGE7IH0KCiAgICBjb25zdCBUKiBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhICsgTjsgfQogICAgVCogZW5kKCkgeyByZXR1cm4gZGF0YSArIE47IH0KCnByaXZhdGU6CiAgICBUIGRhdGFbTl07Cn07CgppbnQgbWFpbigpIHsKICAgIGFycmF5PGludCwgNT4gYXsxLCAyLCAzLCA0LCA1fTsKICAgIGludCByZXMgPSAwOwogICAgZm9yIChhdXRvIHggOiBhKSB7CiAgICAgICAgcmVzICs9IHg7IAogICAgfQogICAgc3RkOjpjb3V0IDw8IHJlcyA8PCBzdGQ6OmVuZGw7ICAvLyAxNQp9