⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector.h

📁 偏微分方程数值解- 这是矩阵的紧致存储及在紧致存储的矩阵上用共轭梯度(CG)方法解Poisson方程的实现, gcc mingw 3.4.4下通过
💻 H
字号:
#include<iostream.h>

class Vector {
public:
  Vector(unsigned length);
  Vector(double *data, unsigned length);
  double& operator() (unsigned entry);
  double  operator() (unsigned entry) const;

 ~Vector();
  

  Vector& operator= (Vector& v);
  Vector& operator+= (Vector& v);
  Vector& operator-= (Vector& v);
  Vector& operator*= (double a);
  unsigned length() {return length_; };
  void clear(){for(unsigned i=0;i<length_;i++) data_[i]=0;};
  bool rescale(unsigned length);
  // ...
protected:
  unsigned length_;
  double* data_;
};

inline
Vector& Vector::operator= (Vector& v){
	unsigned l = v.length();
	data_ = new double[l];
	for(unsigned i=1;i<=l;i++)
		data_[i-1] = v(i);
}

inline
Vector& Vector::operator+= (Vector& v){
	unsigned l = v.length();
	if(l>length_) l = length_; //若长度不等,只加有效部分 
	for(unsigned i=1;i<=l;i++)
		data_[i-1] += v(i);
}

inline
Vector& Vector::operator-= (Vector& v){
	unsigned l = v.length();
	if(l>length_) l = length_; //若长度不等,只加有效部分 
	for(unsigned i=1;i<=l;i++)
		data_[i-1] -= v(i);
}

inline
Vector& Vector::operator*= (double a){
	for(unsigned i=1;i<=length_;i++)
		data_[i-1] *= a;
}



inline
Vector::Vector(unsigned length)
  : length_ (length),
    data_ (new double[length])
{
  if (length == 0)
  void();
//     throw BadIndex("Vector constructor has 0 size");
  unsigned l = length;
  for(unsigned i=0;i<l;i++) data_[i]=0.0;
}

inline
Vector::Vector(double* data, unsigned length)
	: length_ (length),
	  data_ (data)
{}

inline
bool Vector::rescale(unsigned length)
{
	if(length==length_) return false;
	length_ = length;
	delete[] data_;
	data_ = new double[length];
	clear();
	return true;
}

inline
Vector::~Vector()
{
  delete[] data_;
}

inline
double& Vector::operator() (unsigned entry)
{
  if (entry > length_)    void();
//     throw BadIndex("Vector subscript out of bounds");
  return data_[entry-1];
}

inline
double Vector::operator() (unsigned entry) const
{
  if (entry > length_)    void();
//     throw BadIndex("Vector subscript out of bounds");
  return data_[entry-1];
} 

/*
int main()
{
  Vector v(10);
  v(5) = 106.15;
  v *=3;
  cout << v(5);
   getchar();
} 
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -