Declarar um vector de elementos de estrutura C, e têm o número de elementos de ser i (uma entrada do tipo int)

StackOverflow https://stackoverflow.com/questions/574060

  •  05-09-2019
  •  | 
  •  

Pergunta

Por favor, olhe este código (e perdoar a falta de conhecimento). Ele produz erros que eu não poderia resolver. Preciso para declarar um vector de elementos de estrutura C, mas preciso do número de elementos de ser i (uma entrada do tipo int).

Eu também tentei outros se aproxima, mas em todos eles eu recebi um erro (não pode converter C para int, etc). Como posso fazer isso?

# include < iostream >
using std::cout;
using std::cin;
using std::endl;

# include < vector >
using std::vector;

struct C{
    int cor;
    vector<int>cores;

    };

    void LerVector( vector< C> &array ) ;

int main ()
{
     int n;
    bool done=false;
        bool don=false;
    vector<C>cidade;
    int i;


    while(!done){
    cout<<"Entre o número de cidades "<<endl;
    cin>>n;
    if(n>500)
    {
        cout<<endl;
        cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;

}
else {

 LerVector(  cidade) ;

don=true;
}
}


    cin.get();
    return 0;
}
//resolve...
 void LerVector( vector< C> &array ) 
  { 
    for ( size_t i = 0; i < array.size(); i++ ) 
      cin>>array[i];

  } // end function inputVector 
Foi útil?

Solução

Vamos tentar com uma explicação:)

cin >> array[i];

que tenta extrato do cin em objeto de struct C. Bem, por isso precisa de um operador >> que realmente faz esse trabalho:

istream & operator>>(istream &is, C &c) {
    is >> c.cor; // or into whatever member 
    return is;
}

Além disso, como outro mencionado, você realmente tem que adicionar os elementos ao vetor primeiro:

while(!don){
    cout<<"Entre o número de confederações"<<endl;
    ....
} else {
    cidade.resize(i); // resize to i elements
    LerVector(cidade);
    don = true;
}

Para a próxima vez, por favor formatar o texto (travessão corrigi-lo). Foi difícil para mim passo através dele:)

Outras dicas

Que erros se o seu código gerar?

Eu também não sei o que o código é suposto fazer. Em main (), você cria um vector de C. Mas C também contém um vetor de int de. Se que destina?

Eu não sou realmente claro o que você está tentando fazer.

No entanto, eu já pode ver um erro potencial no nosso código:

Em LerVector, você entra com uma referência a um vetor que atualmente não tem nenhum item na mesma, e, portanto, tem um tamanho de 0.

O que você está tentando fazer é que, enquanto i é menor do que o tamanho, você atualizar esse item na matriz. No entanto, quando você começa o tamanho é 0, então eu não acho que você vai mesmo ir para o loop de entrada.

Agora, mesmo se você fez, uma vez que o vetor não é inicializado com qualquer tamanho, você pode obter um erro que você está saindo dos limites. Você tem que redimensionar a rray.

Se eu acho que o que você quer fazer, ele deve ser assim:

// First create an empty vector of C's
vector<C> cidade;

// cidade has zero elements now
// Read i from user
cin >> i;

// Resize vector to contain i elements
cidade.resize(i);

// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
  cin >> cores;
  cidade[n].cores.resize(cores);
  // now cidade[n].cores has 'cores' elements, but they are uninitialized
}

Um dos construtores std::vector<T> terá um tamanho inicial, e se declarou depois que o número é saber que você pode passá-lo para o construtor.

cin >> n;
std::vector<C> cidade(n);

Ou você pode usar o método de redimensionamento para alterar o tamanho de um vetor.

Ou você pode usar o método add para estender o vetor (sem dar explicitamente um tamanho).

Mas no geral, pode ser mais fácil dar ajuda com uma versão completa do código e mais detalhes sobre o que o código está tentando fazer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top