c++primer 课后习题个人解答 part1 3.4


重做 3.3.2 节 的习题,用迭代器而不是下标操作来访问 vector 中的元素。

第一题第一问,本来以为iterator不能做减法,不能小于,后来发现可以。。

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

using std::cin;
using std::cout;
using std::string;
using std::vector;
using std::endl;

int _tmain(int argc, _TCHAR* argv[])

{
    vector<int> myvec;
	int itemp;
	while(cin>>itemp)
		myvec.push_back(itemp);

	for(vector<int>::iterator iter=myvec.begin();iter<myvec.end()-1;iter=iter+2)
	{
		int temp=*iter+*(iter+1);
		cout<<"和是"<<temp<<endl;
	}
	if(myvec.size()%2!=0)
	{
		int temp=*(myvec.end()-1);
		cout<<"单独的数是"<<temp;
	}
	system("pause");
	return 0;
}


第一题 第二问,做的时候出了个问题,后来发现 eIter=myvec.end()-1;我前面写的是eIter=myvec.end();怪不得老报错。以为这种写法不可以呢。

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

using std::cin;
using std::cout;
using std::string;
using std::vector;
using std::endl;

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> myvec;
	int itemp;
	while(cin>>itemp)
		myvec.push_back(itemp);

	for(vector<int>::iterator sIter=myvec.begin(),eIter=myvec.end()-1;sIter<=eIter;sIter++,eIter--)
	{
		if(sIter<eIter){
			int temp=*sIter+*eIter;
			cout<<"和是"<<temp<<endl;
		}
		else{
			int temp=*sIter;
			cout<<"单独是"<<temp<<endl;
		}
	}

	system("pause");
	return 0;
}



 

第二题

做的时候,碰到一个问题,就是遍历每个单词的时候,什么类型的问题,翻看前面的代码,用的是index,而标准答案是string::sizetype,看了以后,明白了。这里是char的集合,不能用vector<char>:iterator,而是string::iterator

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

using std::cin;
using std::cout;
using std::string;
using std::vector;
using std::endl;

int _tmain(int argc, _TCHAR* argv[])
{
    vector<string> myvec;
	string itemp;
	while(cin>>itemp)
		myvec.push_back(itemp);
	
	for(vector<string>::iterator iter=myvec.begin();iter!=myvec.end();++iter){
		for(string::iterator citer=(*iter).begin();citer!=(*iter).end();++citer){
			char tempchar=toupper(*citer);
			cout<<tempchar;
		}
			cout<<"||";
	}

	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值