Declarar um vector de elementos de estrutura C, e têm o número de elementos de ser i (uma entrada do tipo int)
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
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.