练习3.24
#include <iostream>
using namespace std;
#include <string>
#include<vector>
int main() {
int a = 0;
vector<int> b;
while (cin >> a)
b.push_back(a);
auto beg = b.begin();
auto end = b.end();
for (int sum = 0; (beg != end -1) && beg!=end; ) {
sum = *beg + *(beg+1);
beg = beg + 1;
cout << sum << " ";
}
}
#include <iostream>
using namespace std;
#include <string>
#include<vector>
int main() {
int a = 0;
vector<int> b;
while (cin >> a)
b.push_back(a);
auto beg = b.begin();
auto end = b.end();
for (int sum = 0;(end - 1 - beg) >= 0 && beg!=end; ) {
sum = *beg + *(end-1);
beg = beg + 1;
end = end - 1;
cout << sum << " ";
}
}
练习3.25
#include <iostream>
using namespace std;
#include <string>
#include<vector>
int main() {
vector<unsigned> scores(11,0) ;
unsigned grade;
auto beg = scores.begin();
auto end = scores.end();
while (cin >> grade) {
if (grade <= 100)
++*(beg + grade / 10);
}
for (auto i : scores)
cout << i << " ";
}
练习3.26
iter + n
迭代器加上一个整数值仍得一个迭代器的情况下,迭代器指示的新位置与原来相比向前移动了若干个元素。
在 beg != end的情况下,
而 end + beg 已经超过容器范围,因此错误。
而 end - beg 仍可以得到一个迭代器。
一种理解:
vector v = {1,2,3,4,5,6,7,8,9,10}
假设beg的元素位置我定义为1,值为1
尾元素的位置就为10,值为10
而end指的是尾元素的下一位置,即11,值不确定
那么end + beg = 1 +11 =12,没有任何迭代器的位置是12
如果end - beg = 11 - 1 =10, 那就是代表尾元素,就成立
那么mid = beg + (end - beg)/ 2 = 1 +(11-1)/2 =6
另一种方式
mid = beg + v.size()/2 =1 + 10 / 2 =6
可以推出,向前移动或向后移动(end-beg)/ 2 个位置等同于向前移动或向后移动 v.size/2 个位置
请注意:
cout << *end << endl; 系统是会报错的。