Bry*_*rdo 0 c++ loops vector while-loop
我是Mike McGrath编写的一本名为c ++编程的书的"循环时段".
在书中它解释了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) ;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这就是我读这篇文章的方式,我确信我读错了,因为结果对我来说没有意义:
当我小于10(向量的大小)时继续执行此代码.所以整数i是0,但它在代码开头增加到1.然而,接下来是我很困惑的部分.
它说vec [i-1],为什么他减去1?然后让它等于我?如果我试图让vec[i] = i;
程序崩溃.所以我读它的方式是,vec[i - 0 ]
必须为0,因为0在while循环的前一步骤中仅增加到1.然后为了显示结果,他再次将命令调用vec.at()
到i-1,这进一步让我感到困惑.我根本不明白向量中-1的含义.括号内的含义是否意味着向量中的位置?
因为在循环体的第一行中他增加了i
(1
在第一次迭代时使它),所以他需要减去1以返回有效的数组索引(这0
是数组的第一个索引,并且n-1
是最后一个).
当您更改,因为你要访问的程序崩溃vec[1]
,以vec[N]
(其中N
是向量的大小),而不是vec[0]
到vec[N-1]
,向量的实际有效范围.
他正在分配,i
以便每个向量元素包含递增计数.这有点令人困惑.
vec[0] = 1
vec[1] = 2
vec[2] = 3
...
vec[9] = 10
Run Code Online (Sandbox Code Playgroud)
它会更好地写成这样:
int i = 0;
while (i < vec.size()) {
vec[i] = i+1;
cout << " | " << vec[i];
i++;
}
Run Code Online (Sandbox Code Playgroud)
要么:
for (int i = 0; i < vec.size(); i++) {
vec[i] = i+1;
cout << " | " << vec[i];
}
Run Code Online (Sandbox Code Playgroud)