IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

pole

c-plus-plus

#include <iostream>
#include <cstdlib>

using namespace std;

template <typename T, int n>
class UsporadanePole
{
  public:
    unsigned int velikost;
    unsigned int iterator;
    T* pole;
    void swapf(T &, T &);
    T & find(const T &,int,int);

  public:
    UsporadanePole();
    ~UsporadanePole(){delete [] pole;}
    UsporadanePole & operator<<(const T &);
    bool operator-=(const T &);
    unsigned int operator()() const {return velikost;}
    const T *najit(const T & prvek){return &find(prvek,0,velikost+1);}
    bool prvni();
    bool dalsi();
    const T & aktual(){return pole[iterator];}
};



template <typename T, int n>
void UsporadanePole<T,n>::swapf(T & a, T & b)
{
  T c = a;
  a = b;
  b = c;
}

template <typename T, int n>
T & UsporadanePole<T,n>::find(const T & prvek, int b, int e)
{
  int med = (e + b) / 2;
  if(prvek > pole[med])
  {
    if(med == b)
      return *((T*)0);
    else
      return find(prvek,med,e);
  }
  else if(prvek < pole[med])
  {
    if(med == e)
      return *((T*)0);
    else
      return find(prvek,b,med);
  }
  else
    return pole[med];
}

template <typename T, int n>
UsporadanePole<T,n>::UsporadanePole() : velikost(0), iterator(0)
{
  pole = new T[n];
}

template <typename T, int n>
UsporadanePole<T,n> & UsporadanePole<T,n>::operator<<(const T & prvek)
{
  if(velikost < n)
  {
    if(!najit(prvek))
    {
      pole[velikost] = prvek;
      for(int i=velikost;i>0 && pole[i]<pole[i - 1];i--)
        swapf(pole[i], pole[i - 1]);
      velikost++;
    }
  }
  return *this;
}

template <typename T,int n>
bool UsporadanePole<T,n>::operator-=(const T & prvek)
{
  const T* p = najit(prvek);
  if(!p)
    return false;
  else
  {
    for(int i = p - pole;i<velikost - 1;i++)
      swapf(pole[i],pole[i + 1]);
    velikost--;
    return true;
  }
}

template <typename T,int n>
bool UsporadanePole<T,n>::prvni()
{
  iterator = 0;
  if(velikost == 0)
    return false;
  else
    return true;
}

template <typename T,int n>
bool UsporadanePole<T,n>::dalsi()
{
  if(iterator < velikost - 1)
    iterator++;
}

Neformátovaný

Přidáno: 12.12.2012
Expirace: Neuvedeno

Avatar
Autor: Onda.Zadnik
Aktivity