Skip to main content
Code Review

Return to Question

replaced http://codereview.stackexchange.com/ with https://codereview.stackexchange.com/
Source Link
deleted 97 characters in body
Source Link
lightning_missile
  • 2.8k
  • 2
  • 24
  • 42
deleted 4 characters in body
Source Link
lightning_missile
  • 2.8k
  • 2
  • 24
  • 42
template<typename T>
class Ptr {
public:
 Ptr(T* t, int s = 1) : sz{s<1 ? throw std::logic_error("Invalid sz parameter") : s} {
 sz = s;
 p = new T[sz];
 std::copy(t,t+sz,p);
 }
 Ptr(const Ptr& t) : Ptr(t.p, t.sz) { }
 Ptr& operator=(Ptr copy) {
 std::swap(copy.sz, sz);
 std::swap(copy.p, p);
 return *this;
 }
 Ptr(Ptr &&t) :p{t.p}, sz{t.sz} {
 t.p = nullptr;
 t.sz = 0;
 }
 Ptr& operator=(Ptr &&t) {
 std::swap(t.p,p);
 std::swap(t.sz,sz);
 return *this;
 }
 T& operator*() {
 check_range(index);
 return p[index];
 }
 T& operator[](int i) {
 check_range(i);
 return p[i];
 }
 T* get() const {
 return p;
 }
 void operator+=(int i) {
 check_range(index+i);
 index += i;
 }
 void operator-=(int i) {
 operator+=(-i);
 }
 Ptr operator+(int i) {
 Ptr old{*this};
 old += index+i;
 return old;
 }
 Ptr operator-(int i) {
 return operator+(-i);
 }
 Ptr& operator++() {
 operator+=(1);
 return *this;
 }
 Ptr operator++(int) {
 Ptr old{p+index};
 operator++();
 return old;
 }
 Ptr& operator--() {
 operator-=(1);
 return *this;
 }
 Ptr operator--(int) {
 Ptr<T> old{p+index};
 operator--();
 return old;
 }
 ~Ptr() {
 delete[] p;
 }
private:
 T* p;
 int sz;
 int index = 0;
 void check_range(int i) {
 if (i < 0 || i > sz-1) {
 throw std::out_of_range("out of range");
 }
 if (p+indexp+i == nullptr) {
 throw std::out_of_range("null pointer");
 }
 }
};
template<typename T>
class Ptr {
public:
 Ptr(T* t, int s = 1) : sz{s<1 ? throw std::logic_error("Invalid sz parameter") : s} {
 sz = s;
 p = new T[sz];
 std::copy(t,t+sz,p);
 }
 Ptr(const Ptr& t) : Ptr(t.p, t.sz) { }
 Ptr& operator=(Ptr copy) {
 std::swap(copy.sz, sz);
 std::swap(copy.p, p);
 return *this;
 }
 Ptr(Ptr &&t) :p{t.p}, sz{t.sz} {
 t.p = nullptr;
 t.sz = 0;
 }
 Ptr& operator=(Ptr &&t) {
 std::swap(t.p,p);
 std::swap(t.sz,sz);
 return *this;
 }
 T& operator*() {
 check_range(index);
 return p[index];
 }
 T& operator[](int i) {
 check_range(i);
 return p[i];
 }
 T* get() const {
 return p;
 }
 void operator+=(int i) {
 check_range(index+i);
 index += i;
 }
 void operator-=(int i) {
 operator+=(-i);
 }
 Ptr operator+(int i) {
 Ptr old{*this};
 old += index+i;
 return old;
 }
 Ptr operator-(int i) {
 return operator+(-i);
 }
 Ptr& operator++() {
 operator+=(1);
 return *this;
 }
 Ptr operator++(int) {
 Ptr old{p+index};
 operator++();
 return old;
 }
 Ptr& operator--() {
 operator-=(1);
 return *this;
 }
 Ptr operator--(int) {
 Ptr<T> old{p+index};
 operator--();
 return old;
 }
 ~Ptr() {
 delete[] p;
 }
private:
 T* p;
 int sz;
 int index = 0;
 void check_range(int i) {
 if (i < 0 || i > sz-1) {
 throw std::out_of_range("out of range");
 }
 if (p+index == nullptr) {
 throw std::out_of_range("null pointer");
 }
 }
};
template<typename T>
class Ptr {
public:
 Ptr(T* t, int s = 1) : sz{s<1 ? throw std::logic_error("Invalid sz parameter") : s} {
 sz = s;
 p = new T[sz];
 std::copy(t,t+sz,p);
 }
 Ptr(const Ptr& t) : Ptr(t.p, t.sz) { }
 Ptr& operator=(Ptr copy) {
 std::swap(copy.sz, sz);
 std::swap(copy.p, p);
 return *this;
 }
 Ptr(Ptr &&t) :p{t.p}, sz{t.sz} {
 t.p = nullptr;
 t.sz = 0;
 }
 Ptr& operator=(Ptr &&t) {
 std::swap(t.p,p);
 std::swap(t.sz,sz);
 return *this;
 }
 T& operator*() {
 check_range(index);
 return p[index];
 }
 T& operator[](int i) {
 check_range(i);
 return p[i];
 }
 T* get() const {
 return p;
 }
 void operator+=(int i) {
 check_range(index+i);
 index += i;
 }
 void operator-=(int i) {
 operator+=(-i);
 }
 Ptr operator+(int i) {
 Ptr old{*this};
 old += index+i;
 return old;
 }
 Ptr operator-(int i) {
 return operator+(-i);
 }
 Ptr& operator++() {
 operator+=(1);
 return *this;
 }
 Ptr operator++(int) {
 Ptr old{p+index};
 operator++();
 return old;
 }
 Ptr& operator--() {
 operator-=(1);
 return *this;
 }
 Ptr operator--(int) {
 Ptr<T> old{p+index};
 operator--();
 return old;
 }
 ~Ptr() {
 delete[] p;
 }
private:
 T* p;
 int sz;
 int index = 0;
 void check_range(int i) {
 if (i < 0 || i > sz-1) {
 throw std::out_of_range("out of range");
 }
 if (p+i == nullptr) {
 throw std::out_of_range("null pointer");
 }
 }
};
deleted 2 characters in body
Source Link
lightning_missile
  • 2.8k
  • 2
  • 24
  • 42
Loading
Source Link
lightning_missile
  • 2.8k
  • 2
  • 24
  • 42
Loading
lang-cpp

AltStyle によって変換されたページ (->オリジナル) /