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;
}

主要在输出第二种形式的和,自己写的太过繁琐,用迭代器可以直接确定倒数的对象,无需用长度去算。

 

posted @ 2016-09-07 21:07  Neptune15  阅读(189)  评论(0编辑  收藏  举报