Jump to content

Recommended Posts

Posted

Saudações.

O meu problema é o seguinte, tendo:

struct Rec
{
         char nome[51];
         int idade;
};

vector<Rec> registo;

Quero criar um vector de 10 registos, e aceder aos campos 'nome' e 'idade':

registo.resize(10);

for (int i = 0; i < 10; i++)
    {
         registo[ i ].nome = ...
         registo[ i ].idade = ...
    }

Mas não consigo fazer isso. Como vou conseguir aceder aos campos 'nome' e 'idade' deste vector de estruturas? Alguém me pode ajudar?

Peace.

Posted

Ao utilizares o método resize, não estás a criar 10 estruturas no vector. Estás apenas a garantir que consegues inserir 10 estruturas sem operações de realocação de memória.

O que tens que fazer é criar um objecto do tipo Rec, alterar-lhe os valores, fazer push_back do mesmo:

vector<Rec> registos;

...

Rec registo_temp;

for (int i = 0; i < 10; i++) {
        strcpy(registo_temp.nome, "Manel");
        registo_temp.idade = i*8;
        registos.push_back(registo_temp);
}

Já agora, porque não usar string em vez de char[]?

Desaparecido.

Posted

Obrigado.  🙂

Utilizo o char[] porque criei um algoritmo que tira os acentos aos caracteres, neste caso às letras, e que só funciona com o char[].

Já agora outra pergunta: Como poderei ordenar alfabéticamente este vector? Já tentei utilizar o qsort(), mas parece que só dá para os arrays, não funciona para os vectores. Terei que fazer eu próprio o algoritmo?

Posted

Já agora outra pergunta: Como poderei ordenar alfabéticamente este vector? Já tentei utilizar o qsort(), mas parece que só dá para os arrays, não funciona para os vectores. Terei que fazer eu próprio o algoritmo?

Podes utilizar o sort(vector.inicio, vector.fim) ou sort(vector.inicio, vector.fim, função de comparação)....

Por exemplo:

vector<int> myvector;
myvector.push_back(15);
myvector.push_back(19);
myvector.push_back(5);
myvector.push_back(2);
myvector.push_back(20);

sort (myvector.begin(), myvector.begin());

ou então:

bool myfunction (int i,int j) { return (i<j); }
sort (myvector.begin(), myvector.end(), myfunction);

É só questão de fazeres a função de comparação....

Posted

Podes utilizar o sort(vector.inicio, vector.fim) ou sort(vector.inicio, vector.fim, função de comparação)....

Por exemplo:

vector<int> myvector;
myvector.push_back(15);
myvector.push_back(19);
myvector.push_back(5);
myvector.push_back(2);
myvector.push_back(20);

sort (myvector.begin(), myvector.begin());

ou então:

bool myfunction (int i,int j) { return (i<j); }
sort (myvector.begin(), myvector.end(), myfunction);

É só questão de fazeres a função de comparação....

Infelizmente parece que o sort() não funciona com vectores de estruturas (dá mensagem de erro nesse sentido), pelo menos eu não consigo fazer isso. De qualquer forma descobri uma maneira de contornar o problema: utilizo o qsort() num array e passo o array para o vector.

De qualquer maneira, obrigado.  🙂

Posted

Infelizmente parece que o sort() não funciona com vectores de estruturas (dá mensagem de erro nesse sentido), pelo menos eu não consigo fazer isso. De qualquer forma descobri uma maneira de contornar o problema: utilizo o qsort() num array e passo o array para o vector.

De qualquer maneira, obrigado.  😄

😄 Afinal o qsort() pode ser usado em vectores de estruturas:

É esta a sintaxe correcta:

qsort((void*)&registo[0], 10, sizeof(Rec), myfunction);

  🙂

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.