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

📄 kcarray.h

📁 clique code with sample data set. clique is a data clustering algorithm which follows hierarchical c
💻 H
字号:
#ifndef _KCARRAY_H_
#define _KCARRAY_H_

#include <iostream>
#include <assert.h>

using namespace std;

template<class T>
class KCSymArray
{
protected:
  int dim, elements;
  T*  array;
  
  int index(int i, int j){
    if(i*(dim-1) + (i - (i*i))/2 + j < 0 ||
       i*(dim-1) + (i - (i*i))/2 + j >= elements){
      cout << "Error accessing " << i << ", " << j << "(" << i*(dim-1) + (i - (i*i))/2 + j << ")" << endl;
    }

    return i*(dim-1) + (i - (i*i))/2 + j;
  }

  int size(){ 
    return elements; 
  }

public:
  KCSymArray(){
    dim = 0;
    array = NULL;
  }

  KCSymArray(int d){
    createArray(d);
  }
  
  ~KCSymArray(){
    if(array != NULL)
      delete[] array;
  }

  void createArray(int d){
    if(array)
      delete[] array;

    dim = d;
    elements = (d * (d+1)) / 2;
    array = new T[elements];
    assert(array != NULL);    
  }

  void clear(){
    memset((void*)array, 0, size()*sizeof(T));
  }

  int getNumberOfDimensions(){
    return dim;
  }

  T& getValue(int i, int j){
    //    cout << "getValue(" << i << ", " << j << ")" << endl;
    return array[index(i,j)];
  }
  
  void setValue(int i, int j, T v){
    array[index(i,j)] = v;
  }

  void incrementValue(int i, int j){
    array[index(i,j)]++;
  }

  T& getValueSafe(int i, int j){
    return (i <= j) ? getValue(i, j) : getValue(j, i);
  }

  void setValueSafe(int i, int j, T v){
    if(i <= j)
      setValue(i, j, v);
    else
      setValue(j, i, v);
  }

  void incrementValueSafe(int i, int j, T v){
    if(i <= j)
      incrementValue(i, j, v);
    else
      incrementValue(j, i, v);
  }
  
  //friend ostream& operator<<(ostream& os, KCArray& o);
};

#endif

⌨️ 快捷键说明

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