#ifndef __PCSVM_DATASET_HPP__ #define __PCSVM_DATASET_HPP__ #include "SparseVector.hpp" #include "Problem.hpp" namespace pcsvm { using namespace pcsvm; class DataSet { // invariante: // in data_ liegen immer Pointer auf SparseVectors vor, und keine Nullpointer // wird momentan dadurch erreicht, dass data_ zu beginn laenge null hat und // daten nur mit push_back hinzugefügt werden // und z.b. in transpose() dafür gesorgt wird, dass diese invariante erhalten // bleibt. // public: typedef std::vector DataPVector; typedef DataPVector::iterator iterator; typedef DataPVector::const_iterator const_iterator; private: DataPVector data_; public: // konstruktoren + destruktor DataSet(int n=1000): data_() { data_.reserve(n);}; ~DataSet(); template DataSet(const Problem & prob); DataSet(const DataSet & dataSet); // adding and getting DataSet& push_back(const SparseVector &sv) { data_.push_back(new SparseVector(sv)); return *this; } SparseVector* at(int n) { return data_.at(n); } // data about DataSet int maxIndex() const ; int size() const { return data_.size();} // actions DataSet transpose() const; // iterator delegation const_iterator begin() const { return data_.begin(); } const_iterator end() const { return data_.end(); } iterator begin() { return data_.begin(); } iterator end() { return data_.end(); } }; template DataSet::DataSet(const Problem & prob) { data_.reserve(prob.size()); for (typename Problem::const_iterator it=prob.begin(); it != prob.end(); ++it) data_.push_back(new SparseVector(it->vector)); } } // namespace #endif