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


-2

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

Сделать реальный заголовок пожалуйста 16 мар. 122012-03-16 09:59:33

3

Давайте попробуем с пояснением :)

cin >> array[i]; 

, который пытается извлечь из cin в объект STRUCT 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; 
} 

В следующий раз, пожалуйста, отформатируйте текст (исправьте его отступ). Мне было трудно пройти через него :)


0

если я предполагаю, что вы хотите сделать, это должно быть так:

// 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 
} 

1

Какие ошибки сделал код генерации?

Я также не уверен, что ваш код должен делать. В main() вы создаете вектор C. Но C также содержит вектор int. Это предназначено?


1

Я не совсем понимаю, что вы пытаетесь сделать.

Однако, я уже вижу одну потенциальную ошибку в коде:

В LerVector, вы пришли в со ссылкой на вектор, который в настоящее время не имеют каких-либо предметов в нем, и, следовательно, имеет размер 0

Что вы пытаетесь сделать, так это то, что, пока i меньше размера, вы обновляете этот элемент в массиве. Однако, когда вы начинаете размер 0, я не думаю, что вы даже войдете во входной цикл.

Теперь, даже если вы это сделали, так как вектор не инициализирован ни с каким размером, вы можете получить сообщение об ошибке, что вы выходите из пределов. Вы должны изменить размер rray.


0

Один из конструкторов std::vector<T> примет начальный размер, и если объявлено после того, как это число известно, вы можете передать его конструктору.

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

Или вы можете использовать способ изменения размера для изменения размера вектора.

Или вы можете использовать метод add для расширения вектора (без явно заданного размера).

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