查看完整版本: VC++为什么说项目已过期?

沐木猪 2008-5-7 20:49

VC++为什么说项目已过期?

VC++为什么说项目已过期?
谁帮我运行下,看会生成什么?
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

using namespace std;

class string2string {
public:
  string operator() (const string &str) const { return str; };
};

class string2int {
public:
  unsigned int operator() (const string &str) const { return atoi (str.c_str()); };
};

template <class T = unsigned int, class F = string2int> class PrefixSpan {
private:
  vector < vector <T> >            transaction;
  vector < pair <T, unsigned int> > pattern;
  T init;
  unsigned int minsup;
  unsigned int minpat;
  string delimiter;
  bool verbose;
  ostream *os;

  void split (const string &src,
         const string& key,
         vector <T>& result)
  {
    result.clear();
    int len =  src.size();
    int i = 0; int si = 0;
    while(i < len) {
      while (i < len && key.find(src) != string::npos) { si++; i++; };
      while (i < len && key.find(src) == string::npos) i++;
      result.push_back(F()(src.substr(si,i-si)));
      si = i;
    }
  }

  void project (T opat, vector <pair <unsigned int, int> > &projected)
  {
    if (verbose)
      cerr << "## projected by pattern [" << opat << "], "
       << projected.size() << " instances\n";

    map <T, vector <pair <unsigned int, int> > > cnt;
  
    for (unsigned int i = 0; i < projected.size(); i++) {
      int pos = projected.second;
      unsigned int id  = projected.first;
      unsigned int size = transaction[id].size();
      map <T, int> tmp;
      for (unsigned int j = pos + 1; j < size; j++) {
    T item = transaction[id][j];
    if (tmp.find (item) == tmp.end()) tmp[item] = j ;
      }

      for (map <T, int>::iterator k = tmp.begin(); k != tmp.end(); ++k)
    cnt[k->first].push_back (make_pair <unsigned int, int> (id, k->second));
    }

    if (verbose)
      cerr << "## " << cnt.size() << " items found\n";

    for (map <T, vector <pair <unsigned int, int> > >::iterator l = cnt.begin ();
     l != cnt.end (); ) {
      if (l->second.size() < minsup) {
    map <T, vector <pair <unsigned int, int> > >::iterator tmp = l;
    tmp = l;
    ++tmp;
    cnt.erase (l);
    l = tmp;
      } else {
    ++l;
      }
    }

    if (verbose)
      cerr << "## pruned to " << cnt.size() << " items found\n";

    if (cnt.size () == 0) {
      if (minpat <= pattern.size()) {
     for (unsigned int i = 0; i < pattern.size(); i++)
       *os << (i ? " " : "") << pattern.first << delimiter << pattern.second;
     *os << endl;
      }
      return;
    }

    for (map <T, vector <pair <unsigned int, int> > >::iterator l = cnt.begin ();
     l != cnt.end(); ++l) {
      pattern.push_back (make_pair <T, unsigned int> (l->first, l->second.size()));
      project (l->first, l->second);
      pattern.erase (pattern.end());
    }
  }

public:
  PrefixSpan (T _init,
         unsigned int _minsup = 1,
         unsigned int _minpat = 1,
         string _delimiter = "/",
         bool _verbose = false):
    init (_init), minsup(_minsup), minpat (_minpat), delimiter (_delimiter), verbose (_verbose) {};

  ~PrefixSpan () {};

  istream &read (istream &is)
  {
    string line;
    vector <T> tmp;
    while (getline (is, line)) {
      split (line, " ", tmp);
      transaction.push_back (tmp);
    }
    return is;
  }

  void run (ostream &_os)
  {
    os = &_os;
    vector <pair <unsigned int, int> > root;
    for (unsigned int i = 0; i < transaction.size(); i++)
      root.push_back (make_pair (i, -1));
    project (init, root);
  }

  void clear ()
  {
    transaction.clear ();
    pattern.clear ();
  }
};

int main (int argc, char **argv)
{
  extern char *optarg;
  bool verbose = false;
  unsigned int minsup = 1;
  unsigned int minpat = 1;
  string delimiter = "/";
  bool useint = true;

  int opt;
  while ((opt = getopt(argc, argv, "vsM:m:d:")) != -1) {
    switch(opt) {
    case 'v':
      verbose = true;
      break;
    case 'm':
      minsup = atoi (optarg);
      break;
    case 'M':
      minpat = atoi (optarg);
      break;
    case 's':
      useint = false;
      break;
    case 'd':
      delimiter = string (optarg);
      break;
    default:
      cout << "Usage: " << argv[0] << " [-m minsup] [-M minpat] [-v] [-s] [-d delimiter] < data .." << endl;
      return -1;
    }
  }

  if (useint) {
    PrefixSpan<unsigned int, string2int> prefixspan (0, minsup, minpat, delimiter, verbose);
    prefixspan.read (cin);
    prefixspan.run  (cout);
  } else {
    PrefixSpan<string, string2string> prefixspan ("", minsup, minpat, delimiter, verbose);
    prefixspan.read (cin);
    prefixspan.run  (cout);
  }

  return 0;
}

沐木猪 2008-5-8 13:24

:o 怎么没人回答我?
页: [1]
查看完整版本: VC++为什么说项目已过期?