Name, address, phone and age.
And I should print out the two eldest in the list. I could use any language I wanted, then I thought if I chose pure ANSI C would be really painful because I would need to sort these registers using qsort. Then I thought about using C++ and STL, that is really the easiest way to do that fast, and to be honest the shortest and more concise way. The STL supplies me the sort method that can take, a pointer iterator to the first item and one pointer to the last.
When I was there I just forget two important things, when I sort a container I sort it from low to high, as I would override the < operator. And I forgot to implement the constructor.
Anyway I came to home and tried to implement it using DevCpp, which has MingW built in, which is a gcc port for Windows. I think that DevCpp uses a real old version of MingW, but that is no excuse for not compiling STL based code properly. If I use MingW the code below won't compile. I just did what is better for C++ programmers on Windows, I used Visual C++ Express 2008. And it compiles. The copy constructor is a bonus.
Now it is ok , it works fine. I thought about downloading Visual C++ 2010, but it would require a bunch of .NET 4.0 framework based tools and I thought "No for now." I am on a netbook ( It is strange calling this a netbook, as it has 150 GBytes of HD, 1 G of Ram, 1.5 GHz processor and it runs fast while compiling C or .NET code ).
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class Registro {
public:
Registro(string& Nome, string& Endereco, string& telefone, int idade );
Registro(const Registro& reg);
bool operator<(const Registro& reg);
string Nome;
string Endereco;
string telefone;
int idade ;
};
Registro::Registro(string& Nome, string& Endereco, string& telefone, int idade )
{
this->Nome = Nome;
this->Endereco = Endereco;
this->telefone = telefone;
this->idade = idade;
}
Registro::Registro(const Registro& reg)
{
this->Endereco = reg.Endereco;
this->Nome = reg.Nome;
this->telefone = reg.telefone;
this->idade = reg.idade;
}
bool Registro::operator<(const Registro& reg)
{
if ( this->idade < reg.idade)
return true;
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
int cnt = 0;
vector<Registro> regs;
while ( cnt < 4 )
{
string Nome;
string telefone;
string end;
int idade = 0;
cout << "Digite o Nome: " ;
cin >> Nome;
cout << endl;
cout << "Digite o Endereco: " ;
cin >> end;
cout << endl;
cout << "Digite o telefone: " ;
cin >> end;
cout << endl;
cout << "Digite a idade: " ;
cin >> idade;
cout << endl;
Registro reg(Nome,end,telefone,idade);
regs.push_back(reg);
cnt++;
}
sort(regs.begin(), regs.end());
cout << "O Mais idoso: " << regs[regs.size()-1].Nome << endl;
cout << "O segundo mais idoso: " << regs[ regs.size()-2].Nome << endl;
return 0;
}
0 comments:
Post a Comment