代码拉取完成,页面将自动刷新
#ifndef STATIC_VEC1D_H
#define STATIC_VEC1D_H
#include <cstring>
#include <cassert>
template <typename T, size_t sz>
struct svec1d
{
using iter = T *;
using const_iter = const T *;
constexpr static size_t msize = sz;
T elem[sz];
svec1d() noexcept = default;
svec1d(const svec1d &);
svec1d &operator=(const svec1d &);
inline svec1d &operator=(const T &);
T &operator[](size_t n) noexcept { return elem[n]; }
const T &operator[](size_t n) const noexcept { return elem[n]; }
T &operator()(size_t n) noexcept { return elem[n]; }
const T &operator()(size_t n) const noexcept { return elem[n]; }
svec1d &operator+=(const svec1d &a);
svec1d &operator-=(const svec1d &a);
constexpr size_t size() const { return msize; }
iter begin() { return elem; }
const_iter begin() const { return elem; }
iter end() { return elem + msize; }
const_iter end() const { return elem + msize; }
};
template <typename T, size_t sz>
svec1d<T, sz>::svec1d(const svec1d &src)
{
memcpy(elem, src.begin(), sizeof(T) * src.size());
}
template <typename T, size_t sz>
svec1d<T, sz> &svec1d<T, sz>::operator=(const svec1d &src)
{
assert(msize == src.size());
memcpy(elem, src.begin(), sizeof(T) * src.size());
return *this;
}
template <typename T, size_t sz>
svec1d<T, sz> &svec1d<T, sz>::operator=(const T &n)
{
for (int i = 0; i != msize; ++i)
elem[i] = n;
return *this;
}
template <typename T, size_t sz>
svec1d<T, sz> &svec1d<T, sz>::operator+=(const svec1d &a)
{
for (size_t i = 0; i != sz; ++i)
elem[i] += a[i];
return *this;
}
template <typename T, size_t sz>
svec1d<T, sz> &svec1d<T, sz>::operator-=(const svec1d &a)
{
for (size_t i = 0; i != sz; ++i)
elem[i] -= a[i];
return *this;
}
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。