1.执行以下语句后b的值为:
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
A.16 B.0 C.1 D.6
解析
对于表达式(a=w>x)&&(b=y>z)而言,先计算左侧子表达式w>x的结果是假(用0表示),将0的值赋给a,与运算左侧结果是0,那么右侧子表达式无需运算可知整个表达式结果都是0。整个过程中b的值没有变化仍是6。
2.
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for (itor = array.begin(); itor != array.end(); itor++){
if (*itor == 300){
itor = array.erase(itor);
}
}
for (itor = array.begin(); itor != array.end(); itor++){
cout << *itor << " ";
}
return 0;
}
A.100 300 300 500 B.100 300 500 C.100 500 D.程序错误
解析:
B.vector 的erase函数 删除指定位置的元素时, 返回值是一个迭代器,指向删除元素下一个元素。删除第一个300后,itor指向其后的300,然后执行itor++,指向了500.
首先得明白vector 的 erase函数:删除指定位置的元素时, 返回值是一个迭代器,指向删除元素下一个元素。所以 itor = array.erase(itor);删除了元素300后,指向第二个300,还要执行itor++,此时指向了500.
第一次执行完itor = array.erase(itor)后,第一个300被删除,itor指向被删除的下一个位置,也就是300那个位置,然后执行for循环里的i