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