Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Alison_999

Armazenar uma estrutura (struct) no vetor C++

Recommended Posts

Ola, sei pouco sobre C++, estou começando tenho muitas dificuldades, estou tentado fazer um algoritmo que armazene os dados da struct em vetor em seguida mostre:

 

Tenho um codigo que fiz, esta apenas lendo, quando vou passar pro vetor da um erro, dizendo: não premitido a conversão de dados. Vi varias video aulas fiz exemplos mas não consegui resolver meu problema.

 

Abaixo o codigo:

 

 

//estrutura.cpp
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<conio2.h>
#include<string.h>
#define MAX 10

using namespace std;

struct Elementos {
                        int n1;
                        float n2;
                };

main(){



        Elementos numero;
        Elementos vet[MAX];


        for(int i = 0; i < MAX; i++){

            cout << "\n\tDigite um numero :  ";
            cin >> numero.n1;
            cout << "\n\tDigite um numero :  ";
            cin >> numero.n2;
        }

    system("PAUSE");

}




Ficarei grato se alguém me ajudar, obrigado.

 

Programa recebe dois valores, em seguida armazena no vetor e realiza as operações abaixo descritas:

 

a. A soma entre os valores ímpares de n1;
b. A média entre os valores de n2;
c. A raiz quadrada de cada valor positivo de n2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma objeto de uma estrutura simples se assemelha a um vetor porém foi concebida para armazenar valores de diferentes tipos e não de tipos iguais como um vetor. Então vetores armazenam tipos iguais e estruturas armazenam tipos diferentes ok. O mesmo acontece para matrizes e vetor de estruturas, sao muito semelhantes.

 

Que é uma matriz? É um tipo de vetor de vetores tudo do mesmo tipo! Simplesmente isso. Já um vetor de estruturas é como "si" uma matriz permitisse guardar un vetor de valores de diferente tipo, hipoteticamente falando, claro que isso não é possível. Ou sim?!! Sim... se chama estrutura hahaha!!

Vamos explicar como é uma matriz realmente, assim você vai ver o que uma matriz é a mesma coisa que um vetor de estruturas.
Imaginamos que eu tenho um vetor de ponteiros a int:

int *matriz[2];

Agora imaginamos que tenho 2 vetores:

int n1[10];
int n2[10];

Agora unimos todas elas fazendo que matriz[0] aponte a n1 e matriz[1] aponte a n2

matriz[0] = &n1[0];
matriz[1] = &n2[0];

 

Agora poderia fazer traquilamente:
cout << matriz[0][0];

 

...como si de uma matriz normel se trata-se, isso é uma matriz. É um vetor que aponta a outros dados, porém esses dados tem que ser de um tipo igual. A diferencia com uma estrutura e que a acessamos a matriz tipo m[0][0], si fosse uma estrutura seria acessada mais ou menos como m[0].n1 porém isso é incorreto já que n1 é um vetor e por isso se usa []. C/C++ proporcionam diferentes mecanismos de acesso conforme a necessidade tenha isso em conta. Note que nesse caso a matriz pode ter diferentes tamanhos em cada linha, não como quando criamos uma matriz tipo char frase[10linhas][100letras], poderia ser 10 linhas de diferentes quantidades de letras cada uma, porque a criamos manualmente, fica meio chato isso porque teríamos que decorar o tamanho de cada linha, para isso existem outros mecanismos melhores, estruturas por exemplo. :lol:

Agora que sabemos que uma matriz se assemelha e muito a um vetor de estruturas e vice-versa, vamos ver como acessamos o que tem dentro de uma estrutura.

 

si eu tenho:

 

struct Elementos {
    int n1;
    float n2;
} e;

 

a esse objeto "e", eu uso o operador de referencia (.) para acessar ao seu membro e.n1=2, mas si crio um vetor de "Elementos", então a coisa muda. Vamos fazer a mesma coisa que fiz antes com vetor de vetores, mas agora com vetor de estruturas.

Crio um vetor de 2 ponteiros a "Elementos":

Elementos *vet[2];

 

Logo crio 2 objetos do tipo Elemento.
Elemento e1; // um elemento é como um vetor. Lembra? Mas contem um conjunto de variáveis diferentes tipos(tamanho)
Elemento e2;

 

É só fazer o mesmo processo:

vet[0] = e1;

vet[1] = e2;

Note que nesse caso não usei [] como fiz com vetor de vetores, lembre que C/C++ proporcionam diferentes mecanismos de acesso conforme a necessidade, isso te pode confundir um pouco ao principio. Como uma estrutura possui variáveis membro de diferentes tipos, de nada serve trabalhar com [] "índices", si você já estudou aritmética de ponteiros você já sabe a razão para trabalhar com índices, essa razão se traduz a fazer saltos entre variáveis de um mesmo tamanho(tipo), então não serve nas estruturas porque elas contem o membros de diferentes tipos, ou seja, diferentes tamanhos, para isso usamos o operador(.) para acessar a cada objeto individualmente.

si vet fosse uma matriz (vetor de vetores), para aceder a seus membros faríamos vet[][], fazendo uso dos índices[] nos 2 níveis. porém como vet é um (vetor de estruturas) usamos índice para acessar as estruturas no primeiro nível somente, lógico, cada estrutura sim é igual uma da outra, porém dentro da estrutura não são iguais, então para acessar ao conteúdo da estrutura use referencias(.). Isso tudo se traduz a vet[x] .membro Entendeu? Resumindo vet[x].n1, ou vet[x].n2 no seu caso.

 

Vamos ver como fica isso arrumado:

#include<iostream>using namespace std;struct Elementos {    int n1;    float n2;};int main() {    const int MAX = 2;    Elementos vet[MAX];    for ( int i = 0; i < MAX; i++ ) {        cout << "Digite um numero para vet[" << i << "]   int: ";        cin >> vet[i].n1;        cin.sync();  //Evita problemas de leitura evitando que se guarde lixo no buffer, sobretudo quando trabalhamos com strings.                cout << "Digite novamente para vet[" << i << "] float: ";        cin >> vet[i].n2;        cin.sync();        cout << endl;    }    cout << endl;    for ( int i = 0; i < MAX; i++ ) {        cout << "vet[" << i << "]   int : "<<  vet[i].n1 << endl;        cout << "vet[" << i << "] float : "<<  vet[i].n2 << endl;    }    cin.ignore(); //<-melhor que system pause    return 0;    }

Espero que tenha entendido. B)

Editado por vangodp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×