• 24.迭代器(流迭代器,正向,反向迭代器,分配器,存储迭代器)


      1 #include <iostream>
      2 #include <vector>
      3 #include <algorithm>
      4 #include <iterator>
      5 #include <fstream>
      6 #include <deque>
      7 #include <string>
      8 #include <memory>
      9 using namespace std;
     10 
     11 //流迭代器
     12 void main1()
     13 {
     14     //vector<int> v{ 1,2,3,4,5,6,7,8,9 };
     15     ////流迭代器,可以输出到屏幕,也可以输出到文件
     16     //copy(v.begin(), v.end(), ostream_iterator<int>(cout, "  "));
     17 
     18     //写入到文件
     19     //ofstream fout("1.txt");
     20     ////写入到文件再加入"
    "
     21     //ostream_iterator<int> it_tofile(fout,"
    ");
     22     //copy(v.begin(), v.end(), it_tofile);
     23     //fout.close();
     24 
     25     //system("1.txt");
     26 
     27     ifstream fin("1.txt");
     28     ofstream fout("2.txt");
     29 
     30     //读取迭代器
     31     istream_iterator<string> it_fromfile(fin);
     32     //写入迭代器
     33     ostream_iterator<string> it_tofile(fout);
     34 
     35     //从开始到结束复制到it_tofile中
     36     copy(it_fromfile, istream_iterator<string>(), it_tofile);
     37 
     38     fin.close();
     39     fout.close();
     40     
     41     system("2.txt");
     42     cin.get();
     43 }
     44 
     45 //正反向迭代器
     46 void main2()
     47 {
     48     vector<int> v{ 1,3,4,5,6,7,8,9 };
     49     //读写正向迭代
     50     for (auto ib = v.begin(), ie = v.end(); ib != ie; ib++)
     51     {
     52 
     53     }
     54     //只读正向迭代
     55     for (auto ib = v.cbegin(), ie = v.cend(); ib != ie; ib++)
     56     {
     57 
     58     }
     59     //读写反向迭代器
     60     for (auto ib = v.rbegin(), ie = v.rend(); ib != ie; ib++)
     61     {
     62 
     63     }
     64     //只读反向迭代器
     65     for (auto ib = v.rbegin(), ie = v.rend(); ib != ie; ib++)
     66     {
     67 
     68     }
     69     cin.get();
     70 }
     71 
     72 //正向,反向,随机插入迭代器
     73 void main3()
     74 {
     75     deque<int> myd{ 1,2,3,4,5 };
     76 
     77     //正向插入迭代器 位置在头部
     78     front_insert_iterator<deque<int>> it(myd);
     79     //反向插入迭代器 位置在尾部
     80     back_insert_iterator<deque<int>> its(myd);
     81     //随机插入迭代器 位置在随机位置
     82     insert_iterator<deque<int>> itss(myd, myd.begin() + 3);
     83     //反向迭代器
     84     reverse_iterator <deque<int>::iterator> rb(myd.end());
     85     reverse_iterator <deque<int>::iterator> re(myd.begin());
     86     //通过反向迭代器反向输出
     87     copy(rb, re, ostream_iterator<int>(cout, " "));
     88 
     89     *it = 1000;
     90 
     91     for (auto i : myd)
     92     {
     93         cout << i << endl;
     94     }
     95     cin.get();
     96 }
     97 
     98 class A
     99 {
    100 public:
    101     int i;
    102 
    103 public:
    104     A(int num):i(num)
    105     {
    106         cout << "  A()" << endl;
    107     }
    108     ~A()
    109     {
    110         cout << "~A()" << endl;
    111     }
    112 };
    113 
    114 void main()
    115 {
    116     //分配器(不会调用构造)
    117     allocator<A> alloc;
    118     A *p = alloc.allocate(10);
    119     //存储迭代器
    120     raw_storage_iterator<A*, A> rsi(p);
    121     //保存临时对象,作用区域完了就销毁
    122     for (int i = 0; i < 10; i++)
    123     {
    124         *rsi++ = A(i);
    125     }
    126 
    127     for (int i = 0; i < 10; i++)
    128     {
    129         cout << (int)((*p++).i) << endl;
    130     }
    131 
    132     //手动调用析构
    133     for (int i = 0; i < 10; i++)
    134     {
    135         alloc.destroy(p+i);
    136     }
    137     
    138     //alloc.deallocate(p, 10);
    139     cin.get();
    140 }
  • 相关阅读:
    普通图片转ascii码字符图
    基于RAF的一个小动画框
    HTML5给我们带来了什么
    记坑
    以后的博客可能会偏向游戏开发方向
    总结:js中4类修改样式的方法
    小记:css特殊性
    css小记
    探究绑定事件的this指向以及event传参的小问题
    手把手教你图片转ASCII码图
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8640361.html
Copyright © 2020-2023  润新知