练习5.15
(a)for语句头中定义的ix变量只在for循环体内课件。for循环结束后ix就不可用了。可以通过将ix定义在循环外来修改代码:
int main() {
int ix = 0; //定义在循环外
for (/*空语句*/; ix != sz; ++ix) {
/*...*/
}
if (ix != sz)
}
(b)没有init-statement语句,即使为空,也不能省略分号。
int main() {
int ix;
for ( ;ix != sz; ++ix) {/*...*/ }
}
©如果sz=0,第一次求值结果就是false,则statement一次也不会执行,相反如果sz=1,那么每次执行完statement之后,sz和ix都加一,判断总是true,无法退出循环,必须在statement内部添加跳出循环的语句。
int main() {
for (int ix = 0; ix != sz; ++ix, ++sz) {/*...*/ }
}
练习5.16
更习惯用while,循环的顺序比较清晰。
而for语句,有跳动,但更加简洁。
练习5.17
int main(){
vector<int> i1 = { 0,1,1,2,3,5,8,10};
vector<int> i2 = { 0,1,1,2,3,5,8 };
decltype(i1.size()) index = 0;
int a = 0;
if (i1.size() <= i2.size()) //如果i1的元素数量小于或等于i2的元素数量
{
while (index != i1.size())
{
if (i1[index] == i2[index])
{
index++;
}
else
break; //跳出循环,保留最后一位相同元素的下标index
}
if (index == i1.size()) //如果index等于元素数量,说明前面已经全部循环完并相等
a = 1;
else
a = 0;
cout << ((a == 1) ? "i1 是i2的前缀或等于i2" : "i1 不是i2的前缀");;
}
if (i1.size() > i2.size()) //如果i1的元素数量大于i2的元素数量
{
while (index != i2.size())
{
if (i1[index] == i2[index])
{
index++;
}
else
break; //跳出循环,保留最后一位相同元素的下标index
}
if (index == i2.size()) //如果index等于元素数量,说明前面已经全部循环完并相等
a = 1;
else
a = 0;
cout << ((a==1)? "i2 是i1的前缀":"i2 不是i1的前缀");
}
}