Объявите вектор элементов структуры C, и пусть количество элементов будет равно i (входные данные типа int)
Вопрос
Пожалуйста, взгляните на этот код (и простите за недостаток знаний).Он выдает ошибки, которые я не смог решить.Мне нужно объявить вектор элементов структуры C, но мне нужно, чтобы количество элементов было равно i (входные данные типа int).
Я также пробовал другие подходы, но во всех них я получал ошибку (не удается преобразовать C в int и т.д.).Как я могу это сделать?
# 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
Решение
Давайте попробуем с объяснением :)
cin >> array[i];
Который пытается извлечь из cin
в объект структуры C.Ну, значит, ему нужен оператор>>, который действительно выполняет эту работу:
istream & operator>>(istream &is, C &c) {
is >> c.cor; // or into whatever member
return is;
}
Кроме того, как упоминалось в другом, сначала вы должны фактически добавить элементы в вектор:
while(!don){
cout<<"Entre o número de confederações"<<endl;
....
} else {
cidade.resize(i); // resize to i elements
LerVector(cidade);
don = true;
}
В следующий раз, пожалуйста, отформатируйте текст (сделайте правильный отступ).Мне было трудно перешагнуть через это :)
Другие советы
Какие ошибки сгенерировал ваш код?
Я также не уверен, что должен делать ваш код.В main() вы создаете вектор C.Но C также содержит вектор значений int .Это специально?
Я не совсем понимаю, что ты пытаешься сделать.
Однако я уже вижу одну потенциальную ошибку в нашем коде:
В LerVector вы вводите ссылку на вектор, в котором в данный момент нет никаких элементов и, следовательно, он имеет размер 0.
Что вы пытаетесь сделать, так это то, что до тех пор, пока значение i меньше заданного размера, вы обновляете этот элемент в массиве.Однако, когда вы начинаете, size равен 0, поэтому я не думаю, что вы даже войдете в цикл ввода.
Теперь, даже если вы это сделали, поскольку вектор не инициализирован никаким размером, вы можете получить сообщение об ошибке, что вы выходите за границы.Вы должны изменить размер rray.
если я догадываюсь, что вы хотите сделать, это должно быть примерно так:
// 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
}
Один из std::vector<T>
конструкторы будут принимать начальный размер, и если после этого числа объявлено значение know, вы можете передать его конструктору.
cin >> n;
std::vector<C> cidade(n);
Или вы можете использовать метод изменения размера, чтобы изменить размер вектора.
Или вы можете использовать метод add для расширения вектора (без явного указания размера).
Но в целом, возможно, было бы проще предоставить помощь с полной версией кода и более подробной информацией о том, что код пытается сделать.