library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub maspypy/library

:warning: ds/static_vector.hpp

Code

// 固定のサイズ上限をもつ vector
template <typename T, int N>
struct Static_Vector {
  array<T, N> dat;
  int n = 0;

  int size() const { return n; }
  bool empty() const { return n == 0; }

  T& operator[](int i) { return dat[i]; }
  const T& operator[](int i) const { return dat[i]; }

  void push_back(const T& x) { dat[n++] = x; }
  void push_back(T&& x) { dat[n++] = move(x); }

  template <typename... Args>
  T& emplace_back(Args&&... args) {
    return dat[n++] = T(forward<Args>(args)...);
  }

  auto begin() { return dat.begin(); }
  auto end() { return dat.begin() + n; }
  auto begin() const { return dat.begin(); }
  auto end() const { return dat.begin() + n; }
  void clear() { n = 0; }
  using iterator = typename array<T, N>::iterator;
  iterator insert(iterator pos, const T& x) {
    assert(n < N);
    int k = pos - begin();
    dat[n++] = x;
    rotate(begin() + k, end() - 1, end());
    return begin() + k;
  }
};
#line 1 "ds/static_vector.hpp"
// 固定のサイズ上限をもつ vector
template <typename T, int N>
struct Static_Vector {
  array<T, N> dat;
  int n = 0;

  int size() const { return n; }
  bool empty() const { return n == 0; }

  T& operator[](int i) { return dat[i]; }
  const T& operator[](int i) const { return dat[i]; }

  void push_back(const T& x) { dat[n++] = x; }
  void push_back(T&& x) { dat[n++] = move(x); }

  template <typename... Args>
  T& emplace_back(Args&&... args) {
    return dat[n++] = T(forward<Args>(args)...);
  }

  auto begin() { return dat.begin(); }
  auto end() { return dat.begin() + n; }
  auto begin() const { return dat.begin(); }
  auto end() const { return dat.begin() + n; }
  void clear() { n = 0; }
  using iterator = typename array<T, N>::iterator;
  iterator insert(iterator pos, const T& x) {
    assert(n < N);
    int k = pos - begin();
    dat[n++] = x;
    rotate(begin() + k, end() - 1, end());
    return begin() + k;
  }
};
Back to top page