2017-02-05 3 views
-4

Я сделал этот код, который должен построить два вектора: один с целыми числами до 100, а другой с квадратами этих целых чисел и хотел бы написать два столбца, чтобы значения выстраивались в линию в двух столбцах. Программа компилируется нормально, но выход пуст, т. Е. Появляется nothinkg, но только сообщение «Process received 0 (0x0)». Что именно мне здесь не хватает?Код компилируется, но нет вывода

#include <iostream> 
#include <cmath> 
#include <iomanip> 
#include <vector> 
using namespace std; 

int main() 
{  
    vector<int> numbers; 
    typedef vector<int>::size_type vec_sz; 
    vec_sz size = numbers.size(); 

    for (vec_sz i = 0; i != numbers.size(); ++i) 
    { 
     numbers.push_back(i); 
    } 

    vector<int> squares; 

    for (vec_sz i = 0; i!= squares.size(); i++) 
    { 
     squares.push_back(i^2); 
    } 
    for (vec_sz i = 0; i != numbers.size(); ++i) 
    { 
     cout << setw(3) 
     << numbers[i] 
     << setw(6) 
     << squares[i] 
     << endl; 
    } 
    return 0; 
} 
+4

Если вы попытаетесь отладить, вы обнаружите, что все циклы for не выполняются вообще. – songyuanyao

+0

'numbers' пуст, когда вы вводите свой первый цикл, поэтому он полностью пропущен и, следовательно, все остальное (и это хорошо, потому что даже один элемент вводит бесконечный цикл роста;' i' никогда не поймает до 'numbers.size()', потому что вы увеличиваете этот размер с каждой итерацией). – WhozCraig

+2

Пожалуйста, узнайте, как использовать отладчик. Вы заметите, что это намного быстрее и легче, чем писать здесь вопрос и ждать ответа, особенно для основных проблем. –

ответ

1

Когда вы пишете эту строку в начале главной функции,

vec_sz size = numbers.size(); 

вы хотите получить размер вектора. Однако numbers пуст, он не содержит никаких данных. Следовательно, размер будет равен 0. Здесь numbers.size() собирается вернуть 0.

Следовательно for (vec_sz i = 0; i != numbers.size(); ++i) не будет выполняться ни разу.

Предположим, что вы хотите заполнить numbers, тогда вы должны знать, сколько значений вы хотите заполнить numbers. Как только вы узнаете это значение, сохраните его в переменной, допустим, count.

Пример:

const int count = 10; 

for (int i = 0; i < count; ++i) { 
    numbers.push_back(i); 
} 

// now numbers.size() will return 10; 

То же самое для вашего squares вектора.

+0

Также стоит отметить, что 'size' никогда не используется. –

+0

_ «Как только вы знаете это значение, сохраните его в переменной» _ Да, но сделайте его 'const'. –

+0

@LightnessRacesinOrbit, true. Пользователь может также попросить ввести значение для 'count'. – Rishi

Смежные вопросы