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

📄 vectors.h

📁 Gaussian Mixture Algorithm
💻 H
字号:
// -*- C++ -*-// Little library of vectors and sparse vectors// Copyright (C) 2007- Leon Bottou// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.// // This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// // You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA// $Id: vectors.h,v 1.1 2008/10/27 23:26:31 cp71 Exp $#ifndef VECTORS_H#define VECTORS_H 1#include <cstring>#include <cassert>#include <iostream>#include "wrapper.h"class FVector;class SVector;typedef float VFloat;class FVector{private:  struct Rep  {    int refcount;    int size;    VFloat *data;    Rep() : size(0), data(0) {}    ~Rep() { delete [] data; }    void resize(int n);    Rep *copy();  };    Wrapper<Rep> w;  Rep *rep() { return w.rep(); }  const Rep *rep() const { return w.rep(); }  void qset(int i, double v);  public:  FVector();  FVector(int n);  FVector(const SVector &v);  int size() const { return rep()->size; }  // these accessors are range-checked.  // get() returns 0 when i is out-of-range.  // set() expands the vector.  double get(int i) const;  double set(int i, double v);  // warning: you can write vector[i] but  // the subscripts are not range-checked!  // on the other hand, that's fast.  operator const VFloat* () const { return rep()->data; }  operator VFloat* () { w.detach(); return rep()->data; }  void clear();  void resize(int n);  void touch(int i);  FVector slice(int fi, int ti) const;  void add(double c1);  void add(const FVector &v2);  void add(const SVector &v2);  void add(const FVector &v2, double c2);  void add(const SVector &v2, double c2);  void add(const FVector &v2, double c2, const FVector &q2);  void add(const SVector &v2, double c2, const FVector &q2);  void scale(double c1);  void combine(double c1, const FVector &v2, double c2);  void combine(double c1, const SVector &v2, double c2);  friend std::ostream& operator<<(std::ostream &f, const FVector &v);  friend std::istream& operator>>(std::istream &f, FVector &v);  bool save(std::ostream &f) const;  bool load(std::istream &f);};class SVector{public:  struct Pair   {     int i;     VFloat v;   };private:  struct Rep  {    int refcount;    int npairs;    int mpairs;    int size;    struct Pair *pairs;        Rep() : npairs(0), mpairs(-1), size(0), pairs(0) {}    ~Rep() { delete [] pairs; }    void resize(int n);    double qset(int i, double v);    Rep *copy();  };    Wrapper<Rep> w;  Rep *rep() { return w.rep(); }  const Rep *rep() const { return w.rep(); }  public:  SVector();  SVector(const FVector &v);  int size() const { return rep()->size; }  // these accessors are range-checked.  // get() returns 0 when i is out-of-range.  // set() expands the vector.  double get(int i) const;  double set(int i, double v);  // to quickly iterate over the non-zero coefficients,  // do for(SVector::Pair *p = x; p->i>=0; p++) { ... }  int npairs() const { return rep()->npairs; }  operator const Pair* () const { return rep()->pairs; }  void clear();  void trim();  SVector slice(int fi, int ti) const;  void add(const SVector &v2);  void add(const SVector &v2, double c2);  void scale(double c1);  void combine(double c1, const SVector &v2, double c2);  friend std::ostream& operator<<(std::ostream &f, const SVector &v);  friend std::istream& operator>>(std::istream &f, SVector &v);  bool save(std::ostream &f) const;  bool load(std::istream &f);  friend SVector combine(const SVector &v1, double a1,                          const SVector &v2, double a2);};double dot(const FVector &v1, const FVector &v2);double dot(const FVector &v1, const SVector &v2);double dot(const SVector &v1, const FVector &v2);double dot(const SVector &v1, const SVector &v2);SVector combine(const SVector &v1, double a1, const SVector &v2, double a2);FVector combine(const FVector &v1, double a1, const SVector &v2, double a2);FVector combine(const SVector &v1, double a1, const FVector &v2, double a2);FVector combine(const FVector &v1, double a1, const FVector &v2, double a2);#endif/* -------------------------------------------------------------   Local Variables:   c++-font-lock-extra-types: ("\\sw+_t" "[A-Z]\\sw*[a-z]\\sw*" "std::\\sw+")   End:   ------------------------------------------------------------- */

⌨️ 快捷键说明

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