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

📄 tridiag.h

📁 data structures, algorithms and Application书的源代码
💻 H
字号:

// file tridiag.h

#ifndef Tridiagonal_
#define Tridiagonal_

// tridiagonal matrix

#include <stdlib.h>
#include <iostream.h>
#include "xcept.h"


template<class T>
class TridiagonalMatrix {
public:
   TridiagonalMatrix(int size = 10)
      {n = size; t = new T [3*n-2];}
   ~TridiagonalMatrix() {delete [] t;}
   TridiagonalMatrix<T>& Store
           (const T& x, int i, int j);
   T Retrieve(int i, int j) const;
   private:
      int n; // matrix dimension
      T *t;  // 1D array for tridiagonal
};

template<class T>
TridiagonalMatrix<T>& TridiagonalMatrix<T>::
                Store(const T& x, int i, int j)
{// Store x as T(i,j)
if ( i < 1 || j < 1 || i > n || j > n)
    throw OutOfBounds();

switch (i - j) {
   case 1: // lower diagonal
      t[i - 2] = x; break;
   case 0: // main diagonal
      t[n + i - 2] = x; break;
   case -1: // upper diagonal
      t[2 * n + i - 2] = x; break;
   default: if(x != 0) throw MustBeZero();
   }
return *this;
}

template <class T>
T TridiagonalMatrix<T>::Retrieve(int i, int j) const
{// Retrieve T(i,j)
if ( i < 1 || j < 1 || i > n || j > n)
    throw OutOfBounds();
 
switch (i - j) {
   case 1: // lower diagonal
           return t[i - 2];
   case 0: // main diagonal
           return t[n + i - 2];
   case -1: // upper diagonal
           return t[2 * n + i - 2];
   default: return 0;
   }
}

#endif

⌨️ 快捷键说明

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