10.4 再探迭代器-插入/IO/反向
生活随笔
收集整理的这篇文章主要介绍了
10.4 再探迭代器-插入/IO/反向
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
10.4.1 插入迭代器
插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素
(1)back_inserter:
接受一个参数,
示例:
auto iter = back_inserter(iVec);
iter = value;
(2)front_inserter:
接受一个参数,
示例:
auto iter = front_inserter(iVec);
iter = value;
(3)inserter:
接受两个参数,示例:auto iter = inserter(iVec, it); //it必须是一个指向iVec的迭代器,
iter = value; //将value插入到it之前
习题 10.28 三种插入迭代器的应用
int main() {int array[] = { 1,2,3,4,5,6 };vector<int> iVec(begin(array), end(array));vector<int> iVec_back;deque<int> iDeque_front;list<int> iList_inserter;copy(iVec.begin(), iVec.end(), back_inserter(iVec_back));copy(iVec.begin(), iVec.end(), front_inserter(iDeque_front));copy(iVec.begin(), iVec.end(), inserter(iList_inserter, iList_inserter.begin()));system("pause"); } View Code习题10.27
int main() {int array[] = { -2, 6, 1, 6, 5, -9, 4, -2, 8 };vector<int> iVec(begin(array), end(array));vector<int> iVecUnique;//元素排序,为拷贝不重复的元素做准备 stable_sort(iVec.begin(), iVec.end());//拷贝不重复的元素到iVecUnique unique_copy(iVec.begin(), iVec.end(), back_inserter(iVecUnique));system("pause"); } View Code10.4.2 iostream迭代器
主要目的是使用算法操作流迭代器。
习题10.30 标准流迭代器的应用
int main() {istream_iterator<int> in_ite(cin); //定义输入流迭代器,并绑定标准输入流istream_iterator<int> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器ostream_iterator<int> out_iter(cout); //定义输出流迭代器,并绑定标准输出流vector<int> iVec;copy(in_ite, in_end, back_inserter(iVec));sort(iVec.begin(), iVec.end());//排序copy(iVec.begin(), iVec.end(), out_iter);//输出到与 out_iter 绑定的标准输出设备system("pause"); } View Code习题 10.29 使用流迭代器读取文件
int main() { ifstream ifstrm("h:\\1.txt"); //定义文件输入流istream_iterator<string> in_iter(ifstrm); //定义IO类的输入迭代器,并绑定ifstrmistream_iterator<string> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器vector<string> strVec;copy(in_iter, in_end, back_inserter(strVec)); //利用copy算法将文件中的内容放到容器,以单词为组 system("pause"); } View Code10.4.3反向迭代器
//假定有一个名为 line 的string,保存着一个逗号分隔的单词列表,我们希望打印line中的第一个单词和最后一个单词,则分别用正向迭代器和逆向迭代器 int main() { string line = "first,middle,last";auto comma = find(line.cbegin(), line.cend(), ','); //查找第一个逗号cout << string(line.cbegin(), comma) << endl;//打印最后一个单词auto rcomma = find(line.crbegin(), line.crend(), ','); //查找最后一个逗号cout << string(line.crbegin(), rcomma) << endl; //错误,输出 tsal 是逆序的//cout << string(rcomma, line.crbegin()) << endl; //错误,rcomma是一个逆向迭代器,而line.crbegin()返回尾后字符,所以会溢出cout << string(rcomma.base(), line.end()) << endl; //正确,反向迭代器调用base()函数会返回普通迭代器,注意调用后指向不同的元素,会移动一位system("pause"); } View Code
转载于:https://www.cnblogs.com/liyubo/p/7868754.html
总结
以上是生活随笔为你收集整理的10.4 再探迭代器-插入/IO/反向的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql for Mac 下创建数据表
- 下一篇: 小程序分享朋友圈之填坑模式