C99.hu

Egy gondolkodtató gyakorló feladatokból álló gyűjtemény. Főbb témák a nyelvspecifikus programozás és a matematika.

Főoldal

Malulukai rablízing

C++

A Malulukai Nemzethy Börtönben (MNB) néha a rabokat új cellákba kell átköltöztetni. A börtön informatikusai által készített nyilvántartórendszer egy leegyszerűsített részletét látja. Fejtse meg, mi lesz a szabványos kimenetre írt szöveg?


// c++17

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>

struct Rab
{
const std::string azonosito;
std::string nev;

Rab(std::string azon, std::string nev): azonosito{azon}, nev{nev}
{
std::cout << "Rab [CTOR]\n";
}

Rab(Rab const& masik):
azonosito{masik.azonosito}, nev{masik.nev}
{
std::cout << "Rab [COPY]\n";
}

Rab(Rab&& masik):
azonosito{std::move(masik.azonosito)}, nev{std::move(masik.nev)}
{
std::cout << "Rab [MOVE]\n";
}

~Rab()
{
std::cout << "Rab [DTOR]\n";
}

};

struct Cella
{
std::vector<Rab> rabok;

Cella() = default;

void berak(Rab const& ujRab)
{
rabok.push_back(ujRab);
}

void athelyez(Rab const& rab, Cella const& honnan)
{
// ...
}

void athelyez(Rab const&& rab, Cella const& honnan)
{
// ...
}

Rab const&& athelyezesElokeszites(std::string azonosito)
{
return std::move(*std::find_if(rabok.begin(), rabok.end(), [&azonosito](auto const& r){
return r.azonosito == azonosito;
}));
}
};

int main()
{
Cella c1, c2;

Rab r {"FE671", "Kiss János"};
c1.berak(r);
c2.athelyez(c1.athelyezesElokeszites("FE671"), c1);

return 0;
}



MegoldásRab [CTOR]
Rab [COPY]
Rab [DTOR]
Rab [DTOR]