Объявите вектор элементов структуры C, и пусть количество элементов будет равно i (входные данные типа int)

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

  •  05-09-2019
  •  | 
  •  

Вопрос

Пожалуйста, взгляните на этот код (и простите за недостаток знаний).Он выдает ошибки, которые я не смог решить.Мне нужно объявить вектор элементов структуры 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 для расширения вектора (без явного указания размера).

Но в целом, возможно, было бы проще предоставить помощь с полной версией кода и более подробной информацией о том, что код пытается сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top