Skip to content

Instantly share code, notes, and snippets.

@tanitanin
Last active August 29, 2015 14:07
Show Gist options
  • Save tanitanin/136302c12dd2b0ea0b2b to your computer and use it in GitHub Desktop.
Save tanitanin/136302c12dd2b0ea0b2b to your computer and use it in GitHub Desktop.
Vector
#pragma once
#include <vector>
template<class T, size_t N = 1>
class vec : public std::vector<vec<T,N-1>> {
public:
explicit vec() : std::vector<vec<T,N-1>>() {}
template<class Size, class... Sizes>
explicit vec(Size n, Sizes... ns) : std::vector<vec<T,N-1>>(n,vec<T,N-1>(ns...)) {}
vec<T,N-1> &at(size_t i) { return std::vector<vec<T,N-1>>::at(i); }
template<class Size, class... Sizes>
T &at(size_t i, Size i2, Sizes... is) { return std::vector<vec<T,N-1>>::at(i).at(i2,is...); }
const vec<T,N-1> &at(size_t i) const { return std::vector<vec<T,N-1>>::at(i); }
template<class Size, class... Sizes>
const T &at(size_t i, Size i2, Sizes... is) const { return std::vector<vec<T,N-1>>::at(i).at(i2,is...); }
};
template<class T>
class vec<T,1> : public std::vector<T> {
public:
explicit vec() : std::vector<T>() {}
explicit vec(size_t n, T init = 0) : std::vector<T>(n, init) {}
T &at(size_t i) { return std::vector<T>::at(i); }
const T &at(size_t i) const { return std::vector<T>::at(i); }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment