📄 array1d.h
字号:
#ifndef Array1D_
#define Array1D_
// One-dimensional arrays.
#include <iostream.h>
#include "xcept.h"
template<class T>
class Array1D {
friend ostream& operator<<
(ostream&, const Array1D<T>&);
public:
Array1D(int size = 0);
Array1D(const Array1D<T>& v); // copy constructor
~Array1D() {delete [] element;}
T& operator[](int i) const;
int Size() {return size;}
Array1D<T>& operator=(const Array1D<T>& v);
Array1D<T> operator+() const; // unary +
Array1D<T> operator+(const Array1D<T>& v) const;
Array1D<T> operator-() const; // unary minus
Array1D<T> operator-(const Array1D<T>& v) const;
Array1D<T> operator*(const Array1D<T>& v) const;
Array1D<T>& operator+=(const T& x);
Array1D<T>& ReSize(int sz);
private:
int size;
T *element; // 1D array
};
template<class T>
Array1D<T>::Array1D(int sz)
{// Constructor for one-dimensional arrays.
if (sz < 0) throw BadInitializers();
size = sz;
element = new T[sz];
}
template<class T>
Array1D<T>::Array1D(const Array1D<T>& v)
{// Copy constructor for one-dimensional arrays.
size = v.size;
element = new T[size]; // get space
for (int i = 0; i < size; i++) // copy elements
element[i] = v.element[i];
}
template<class T>
T& Array1D<T>::operator[](int i) const
{// Return reference to element i.
if (i < 0 || i >= size) throw OutOfBounds();
return element[i];
}
template<class T>
Array1D<T>& Array1D<T>::operator=(const Array1D<T>& v)
{// Overload assignment operator.
if (this != &v) {// not self-assignment
size = v.size;
delete [] element; // free old space
element = new T[size]; // get right amount
for (int i = 0; i < size; i++) // copy elements
element[i] = v.element[i];
}
return *this;
}
template<class T>
Array1D<T> Array1D<T>::
operator+(const Array1D<T>& v) const
{// Return w = (*this) + v.
if (size != v.size) throw SizeMismatch();
// create result array w
Array1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] = element[i] + v.element[i];
return w;
}
template<class T>
Array1D<T> Array1D<T>::
operator-(const Array1D<T>& v) const
{// Return w = (*this) - v.
if (size != v.size) throw SizeMismatch();
// create result array w
Array1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] = element[i] - v.element[i];
return w;
}
template<class T>
Array1D<T> Array1D<T>::operator-() const
{// Return w = -(*this).
// create result array w
Array1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] = -element[i];
return w;
}
template<class T>
Array1D<T> Array1D<T>::operator*(const Array1D<T>& v) const
{// Return w = (*this) * v. Pairwise multiply.
if (size != v.size) throw SizeMismatch();
// create result array w
Array1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] = element[i] * v.element[i];
return w;
}
template<class T>
Array1D<T>& Array1D<T>::operator+=(const T& x)
{// Add x to each element of (*this).
for (int i = 0; i < size; i++)
element[i] += x;
return *this;
}
template<class T>
ostream& operator<<(ostream& out,
const Array1D<T>& x)
{// Put the elements of x into the stream out.
for (int i = 0; i < x.size; i++)
out << x.element[i] << " ";
return out;
}
template<class T>
Array1D<T>& Array1D<T>::ReSize(int sz)
{// Change the size to sz.
// Do not copy array elements to new space.
if (sz < 0) throw BadInitializers();
delete [] element;
size = sz;
element = new T [size];
return *this;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -