在做C++primer第五版,第3.20题.
读入一组整数并把他们存入一个vector对象,要求输出 第一个和最后 一个元素 的和,接着输出第二个和倒数第二个元素的和,依此类推。
代码如下:
#include "iostream"
#include "vector"
#include "cmath"
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
vector <int> ivec;
ivec ={12,11,32,43,34,32,53};
int length=ivec.size();
//注意此处length本身是int,在做length/2时候就已经是3了,所以 在加0.5也就是3.5
//依然会被
for(decltype(length) j=0;j<floor(length/2.0+0.5);j++)
{
if(j!=(length-1-j))
cout <<ivec[j]+ivec[length-1-j] <<endl;
else
cout <<ivec[j] <<endl;
}
return 0;
}
在开始写的时候,for循环里面写的是j<floor(length/2+0.5),改正后发现是最基本的类型错误,声明 的length为int类型(注意ivec,size()返回的类型为vector<int>::size_type属性),length在除以2时已经取整数为3了,所以后面即使加上0.5也还只是3.5,不能进位,在使用 floor(XXX+0.5)这样的操作时,应该确保XXX处表达式的有效性.