c++primer-p101.ex3.24
要求使用迭代器
读入一组整数并把它们存入一个vector对象
1. 将相邻每对整数和输出
2. 先输出第一个和最后一个数的和,然后是第二个和倒数第二个...等等
自己写的:
#include<iostream> #include<vector> using namespace std; void sumOffirst_last(const vector<int> &p){ for(auto t=p.begin();t!=p.end()-1;t++) cout<<*t+*(t+1)<<(t!=p.end()-2?" ":"\n"); } void sumOfnearby(const vector<int> &p){ auto beg=p.begin(),end=p.end(); auto mid=beg+(end-beg)/2; if(p.size()%2!=0) mid++; for(auto t=beg;t!=mid;t++) cout<<*t+*(end-1-(t-beg))<<(t!=mid-1? " ":"\n"); } int main() { vector<int> v; for(int a;cin>>a;v.push_back(a)); sumOffirst_last(v); sumOfnearby(v); return 0; }
参考答案:
#include <iostream> #include <vector> using std::vector; using std::cout; using std::endl; using std::cin; int main() { vector<int> v; for (int buffer; cin >> buffer; v.push_back(buffer)); if (v.size() < 2) { cout << " please enter at least two integers"; return -1; } for (auto it = v.cbegin(); it + 1 != v.cend(); ++it) cout << *it + *(it + 1) << " "; cout << endl; for (auto lft = v.cbegin(), rht = v.cend() - 1; lft <= rht; ++lft, --rht)//!!!! cout << *lft + *rht << " "; cout << endl; return 0; }
主要在输出第二种形式的和,自己写的太过繁琐,用迭代器可以直接确定倒数的对象,无需用长度去算。