Я нахожусь в сегменте «looping while» книги с именем C++ programming, написанном Майком Макгратом.Проблемы с простым циклом while
В книге объясняется, как работает цикл while и что он может и чего не может сделать и т. Д. Он дает пример кода, который я понимаю по большей части, за исключением того, что книга не объясняет, и мне было интересно, Вы могли бы это объяснить.
Это код:
#include <iostream>
#include <vector>
using namespace std ;
int main(){
vector <int> vec(10) ;
int i = 0 ;
while (i < vec.size()){
i ++ ;
vec[i-1] = i ;
cout << " | " << vec.at(i-1) ;
}
}
Теперь это путь я читаю это, и я уверен, что я читаю это неправильно, потому что результаты не имеют никакого смысла для меня:
Пока я меньше 10 (размер), продолжайте выполнение этого кода. Поэтому целое число i равно 0, но оно увеличивается до 1 в начале кода. Далее, однако, это та часть, о которой я так смущен.
Он говорит vec [i-1], почему он вычитает 1? А затем сделать его равным i? Если я попытаюсь сделать это vec[i] = i;
, программа выйдет из строя. Поэтому, как я его читаю, vec[i - 0 ]
должно быть 0, так как 0 был только что увеличен до 1 на предыдущем шаге цикла while. Затем, чтобы отобразить результаты, он снова вызывает команду vec.at()
на i-1, что еще больше смущает меня. Я просто не понимаю, что означает -1 в векторе. Разве не должно быть то, что находится внутри скобок, означает положение внутри вектора?
И это намного лучший способ написать это. (Конечно, вы, вероятно, не должны использовать 'at', а скорее' [] ', с включенными параметрами отладки, но здесь это не имеет значения.) –