Programare Orientata Pe Obiecte: Curs 12 - Containere
Programare Orientata Pe Obiecte: Curs 12 - Containere
Curs 12 – Containere
C
++{};
C++ Acest curs
› Exemplu de implementare a unui container
› Iterator
› STL
C++ Introducere – simplă clasă vector
› Fie clasa CVector:
class CVector
{
int *v;
size_t sz;
size_t idx;
const size_t chunk = 10;
public:
CVector();
CVector(size_t size);
CVector(const CVector &c);
~CVector();
size_t GetSize(void);
int& GetItem(size_t index);
void PushBack(int item);
int PopBack(void);
};
C++
CVector::CVector() : v(nullptr), sz(0), idx(0)
{}
size_t CVector::GetSize(void)
{
return idx;
}
C++ {
int *tmp = nullptr;
try
{
tmp = new int[sz + chunk];
}
catch (std::bad_alloc& ba)
{
std::cerr << "bad_alloc: " << ba.what() << "\n";
}
if (tmp != nullptr)
{
memcpy(tmp, v, idx * sizeof(int));
sz = sz + chunk; tmp[idx] = item; idx++;
delete[] v;
v = tmp;
}
}
else
{
v[idx] = item; idx++;
}
C++
int CVector::PopBack(void)
{
if (idx > 0)
{
idx--;
return v[idx];
}
else
{
throw "No more items!";
}
}
C++ Introducere – simplă clasă vector
› Utilizarea tipului de date CVector:
int main(void)
{
CVector v;
v.PushBack(1);
v.PushBack(2);
v.PushBack(3);
v.PushBack(4);
v.PushBack(5);
v.PushBack(1.1);
v.PushBack(2.2);
v.PushBack(3.3);
v.PushBack(4.4);
v.PushBack(5.5);
v.PushBack(1);
v.PushBack(2);
v.PushBack(3);
v.PushBack(4);
v.PushBack(5);
list<int>::iterator it;
for(it=listInt.begin(); it!=listInt.end(); it++)
cout<<*it<<" ";
cout<<endl;
listInt.sort();
cout<<"Lista sortata"<<endl;
for(it=listInt.begin(); it!=listInt.end(); it++)
cout<<*it<<" ";
cout<<endl;
C++
list<Student> listStud;
listStud.push_back(stud2);
listStud.push_front(stud3);
listStud.insert(listStud.end(),s1);
list<Student>::iterator it;
for(it=listStud.begin(); it!=listStud.end(); it++)
cout<<(*it).GetNrMat()<<" "<< vectInt[i].GetNume()<<endl;
cout<<endl;
listStud.sort();