练习3.24:请使用迭代器重做3.3.3节的最后一个练习(读入一组整数并把他们存入一个vector对象,先输出第一个和最后一个元素的和,接着输出第二个和倒数第二个元素的和,以此类推)
#include<iostream> #include<vector> using namespace std; int main() { int a; vector<int> v; while(cin>>a) v.push_back(a); auto head = v.begin(), tail = v.end(); for(;head<tail-1;++head,--tail) { cout<<*head+*(tail-1)<<endl; } return 0; }
这是我做的第一个版本,但是在StackOverflow上看到相同问题,发现没有检查vector是空的的情况。修改版见http://stackoverflow.com/questions/26764617/c-primer-5th-edition-exercise-3-24-iterators-in-vectors第三个答案,逆向迭代器还没开始学,先搁置。可先在auto前套一个if(!v.empty())
练习3.26:在100页的二分搜索程序中,为什么用的是mid=beg+(end-beg)/2,而非mid = (beg+end)/2?
- 不会产生比end大的中间数据,更安全
- 指针和迭代器不可相加但可相减。
时间: 2024-10-13 02:23:57