vectorと単項の演算を作ってみた

0-indexedのものを1-indexedにして出力したいなぁってなったときにわざわざループを回して+1したりvalarrayにおきかえたりするのはひと手間がかかると感じたので演算子を作った

operator+=

template <typename T>
void operator+=(vector<T> &vs, T x){
  for(T &v:vs) v += x;
}

他の四則演算もほとんど同じ

operator+

template <typename T>
vector<T> operator+(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v += x;
  return res;
}

他の四則演算もほとんど同じ

完成形

template <typename T>
void operator+=(vector<T> &vs, T x){
  for(T &v:vs) v += x;
}

template <typename T>
void operator-=(vector<T> &vs, T x){
  for(T &v:vs) v -= x;
}

template <typename T>
void operator*=(vector<T> &vs, T x){
  for(T &v:vs) v *= x;
}

template <typename T>
void operator/=(vector<T> &vs, T x){
  for(T &v:vs) v /= x;
}

template <typename T>
void operator%=(vector<T> &vs, T x){
  for(T &v:vs) v %= x;
}

template <typename T>
vector<T> operator+(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v += x;
  return res;
}

template <typename T>
vector<T> operator-(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v -= x;
  return res;
}

template <typename T>
vector<T> operator*(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v *= x;
  return res;
}

template <typename T>
vector<T> operator/(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v /= x;
  return res;
}

template <typename T>
vector<T> operator%(const vector<T> &vs, T x){
  vector<T> res=vs;
  for(T &v:res) v %= x;
  return res;
}
template <typename T> void operator+=(vector<T> &vs, T x) { for ( T &v : vs ) v += x; }
template <typename T> void operator-=(vector<T> &vs, T x) { for ( T &v : vs ) v -= x; }
template <typename T> void operator*=(vector<T> &vs, T x) { for ( T &v : vs ) v *= x; }
template <typename T> void operator/=(vector<T> &vs, T x) { for ( T &v : vs ) v /= x; }
template <typename T> void operator%=(vector<T> &vs, T x) { for ( T &v : vs ) v %= x; }
template <typename T> vector<T> operator+(const vector<T> &vs, T x) { vector<T> res = vs; for ( T &v : res ) v += x; return res; }
template <typename T> vector<T> operator-(const vector<T> &vs, T x) { vector<T> res = vs; for ( T &v : res ) v -= x; return res; }
template <typename T> vector<T> operator*(const vector<T> &vs, T x) { vector<T> res = vs; for ( T &v : res ) v *= x; return res; }
template <typename T> vector<T> operator/(const vector<T> &vs, T x) { vector<T> res = vs; for ( T &v : res ) v /= x; return res; }
template <typename T> vector<T> operator%(const vector<T> &vs, T x) { vector<T> res = vs; for ( T &v : res ) v %= x; return res; }

あとがき

これでほんの少し便利になったと思う

参考