C++ primer课后题有题目不会做,初学者

C++ primer课后题有题目不会做,菜鸟求助
C++primer中的第3.13题
读一组整数到 vector 对象,计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
vector<int> vec;
int i;
while(cin>>i)
vec.push_back(i);
if(0 != vec.size()%2) {
cout<<"最后一个数字没有配对的"<<endl;
cout<<vec[vec.size()-1];
//是否跳出主函数 尝试是是可以的,这里直接退出main函数,因为有返回值了
return -1;
}
//尝试下index直接+2, 尝试之后不可以,或者可以写清楚表达式index = index+2
for(vector<int>::size_type index = 0;index != vec.size()-1;++(++index)) {
cout<<vec[index] + vec[index+1]<<endl;
}

return 0;
}



我这段代码运行结果,没问题但是为什么会提示
vector subscript out of range

不理解for循环那里越界操作了
------解决方案--------------------
index是2个一加 也就是 0 2 4 6 8
判断条件是index != vec.size()-1  也就是说vector里是偶数个数字的话
左值为偶数 右值为奇数 条件永远为真
0!=(6-1) 2!=(6-1)4!=(6-1) 6!=(6-1)
所以必然会越界

------解决方案--------------------
你的循环有问题

(vector<int>::size_type index = 0;index != vec.size()-1;index+=2)
//index+=2跳过了index != vec.size()-1的判断
比如vec中有2个数1和2
vec.size=2;

for循环最初index=0,没问题
第二次index加2,变成2
2!=vec.size()-1,所以循环仍然执行
显然,这个时候下标越界了