Member 12702056 Ответов: 2

Почему моя эта программа не сработала? Что не так?


#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int>S;
    cout<<S.size();
    S.push_back(23);
    S.push_back(45);
    S.push_back(-99);
    S[4]=99;
    cout<<'|'<<S.at(0)<<'|'<<S.at(1)<<'|'<<S.at(2)<<'|'<<S.at(3)<<'|'<<S.at(4)<<'|';
    cout<<endl<<S.size();
    return 0;
}


Что я уже пробовал:

я собрал и запустил его, но он ничего не показал.Пожалуйста, помогите мне.что не так с моей программой?

2 Ответов

Рейтинг:
9

Patrice T

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

[Обновление]
Используйте отступы в своем коде, это помогает читать, когда код становится сложным.


Member 12702056

Большое спасибо :) Я постараюсь :). Но я хочу знать, поможет ли мне отладчик в поиске логических проблем?

Patrice T

Отладчик позволяет вам запускать вашу программу построчно, и поскольку он позволяет вам проверять переменные после каждой строки, вы увидите, где что-то идет не так.

Member 12702056

Спасибо :) Наконец-то я понял, что такое отладчик :) Я тоже читал об этом :) Спасибо снова :)

Рейтинг:
16

Philippe Mori

Ваша программа не определена, потому что вы получаете доступ к несуществующим элементам.

В частности, следующая строка имеет неопределенное поведение, поскольку элемент с индексом 4 еще не существует.

S[4]=99;

Таким образом, вам следует ознакомиться с документацией:
vector:: operator [] - ссылка на C++ [^]
вектор:: оператор[^]

На самом деле, как раз перед тем, как эта строка будет выполнена, у вас есть 3 элемента с индексом 0, 1 и 2.

Учитывая это, следующая строка также неверна, поскольку вы пытаетесь отобразить элементы с индексами 3 и 4. Таким образом, вы должны позвонить push_back дважды, чтобы добавить эти элементы.
S.push_back(0);   // Whatever you want at index 3...
S.push_back(99);  // Instead of S[4] = 99;

Кстати, я бы рекомендовал вам добавить немного пробелов (и отступов) для удобства чтения. Вот несколько примеров из вашего кода, которые более читабельны с некоторыми дополнительными пробелами:
vector<int> S;
//...
S[4] = 99;
cout << '|' << S.at(0) << '|' << S.at(1) << '|' << S.at(2) << '|' << S.at(3) << '|' << S.at(4) << '|';
cout << endl << S.size();
return 0;


Member 12702056

Большое вам спасибо:) очень четкое объяснение :)