C++ primer 第四版 练习3.13,3.14
读一组整数到 vector 对象,计算并输出每对相邻元素的 和。如果读入元素个数为奇数,则提示用户后一个元素 没有求和,并输出其值。
vector<int> ivec; int ival; cout<<"Enter numbers(Ctrl + z to end) "<<endl; while(cin>>ival) { ivec.push_back(ival); } if(ivec.size() == 0) { cout<<"No elements"<<endl; return -1; } cout<<"Sum of each pair of adjacent element in the vector:"<<endl; for(vector<int>::size_type ix = 0;ix < ivec.size()-1;ix = ix + 2) { cout<<ivec[ix] + ivec[ix+1]<<"\t"; if((ix+1)%6 == 0) { cout<<endl; } } if(ivec.size()%2 !=0) { cout<<endl; cout<<"The last element is not been summed"<<"and the value is "<<ivec[ivec.size()-1]<<endl; }
然后修改程序:头尾元素两两配 对(第一个和后一个,第二个和倒数第二个,以此类推), 计算每对元素的和,并输出。
vector<int> ivec; int ival; cout<<"Enter numbers(Ctrl + z to end) "<<endl; while(cin>>ival) { ivec.push_back(ival); } if(ivec.size() == 0) { cout<<"No elements"<<endl; return -1; } cout<<"Sum of each pair of adjacent element in the vector:"<<endl; vector<int>::size_type cnt =0; vector<int>::size_type first =0,last = ivec.size() -1; for(;first < last;++first,--last) { cout<<ivec[first] + ivec[last]<<"\t"; ++cnt; if(cnt%6 == 0) { cout<<endl; } } if(first == last) { cout<<endl; cout<<"The last element is not been summed"<<"and the value is "<<ivec[first]<<endl; }
读入一段文本到 vector 对象,每个单词存储为 vector 中的一个元素。把 vector 对象中每个单词转化为大写字 母。输出 vector 对象中转化后的元素,每八个单词为一 行输出。
vector<string> svec; string str; cout<<"Enter numbers(Ctrl + z to end) "<<endl; while(cin>>str) { svec.push_back(str); } if(svec.size() == 0) { cout<<"No elements"<<endl; return -1; } cout<<"Transformed elements from the vector:"<<endl; for(vector<string>::size_type ix =0;ix != svec.size();++ix) { for(string::size_type index = 0;index != svec[ix].size();++index) if(islower(svec[ix][index])) svec[ix][index] = toupper(svec[ix][index]); cout<<svec[ix]<<" "; if((ix+1)%8 ==0) cout<<endl; }
列出三种定义 vector 对象的方法,给定 10 个元素,每 个元素值为 42。指出是否还有更好的实现方法,并说明 为什么。
方法一:
vector<int> ivec(10,42);
方法二:
vector<int> ivec(10); for(ix =0;ix != ivec.size() - 1;++ix ) { ivec[ix] = 42; }
方法三:
vector<int> ivec(10); for(vector<int> iterator iter = ivec.begin();iter != ivec.end();++ iter ) { *iter =42; }
方法四:
vector<int> ivec; for(cnt = 1;cnt<=10;++cnt) { ivec.push_back(42); }
方法五:
vector<int> ivec; vector<int> iterator iter = ivec.end(); for(int i = 0;i<10;i++) { ivec.insert(iter ,42); iter = ivec.end(); }
以上是C++ primer给出的五种方法,书上说第4,5种方法更好些。因为他们使用标准库容器中定义的容器操作在容器中添加元素,无需再vector定义对象时指定容器的大小,比较灵活且不容易出错。