zoukankan      html  css  js  c++  java
  • C++第11课 迭代器与仿函数 (一)

    1.迭代器

    迭代器:可以说是一种访问容器的一个桥梁,类中类的一个对象,去模仿指针的行为

    迭代器分类:

    按照定义方式分类:

    + 正向迭代器:
    + 容器名::iterator iter;
    + begin();
    + end();
    + 常量正向迭代器
    + 容器名::const_iterator citer
    + cbegin();
    + cend();
    + 反向迭代器
    + 容器名::reverse_iterator riter
    + rbegin();
    + rend();
    + 常量的反向迭代器
    + 容器名::const_reverse_iterator rciter
    + crbegin();
    + crend();

    按照访问方式:

    + 正向访问
    + 双向
    + 随机访问

    内置迭代器

    | array | 随机迭代器 |
    | -------------------------------- | ------------ |
    | vector | 随机迭代器 |
    | deque | 随机迭代器 |
    | list | 双向 |
    | set/multiset | 双向 |
    | map/multimap | 双向 |
    | stack以及queue以及priority_queue | 不支持迭代器 |

    迭代器的辅助函数

    + advance(iter iter,int n); 把iter 移动到 iter+n;
    + distance(iterator begin,iterator end); end如果在begin的前面,就会死循环
    + iter_swap(iteartor first,iterator second); 交换两个迭代器指向的值

    流型迭代器

    + 输出流型迭代器
    + ostream_iterator<type> iteratorObject(ostream object);
    + ostream_iterator<type> iteratorObject(ostream object,const char* str);
    + iteratorObject=value; 直接value数据打印到屏幕上
    + 输入流型迭代器
    + istream_iterator<type> iteratorObject; 代表一个end_of_stream
    + istream_iterator<type> iteratorObject(istream object);
    + *iteratorObject, 等效做cin>>操作

    int main()
    {
        vector<int> intData = { 1,2,3,4,5,6,7 };
        vector<int>::iterator iter = intData.begin();
        while (iter != intData.end())
        {
            cout << *iter << "	";
            iter++;
        }
        cout << endl;
        vector<int>::reverse_iterator rIter;
        for (rIter = intData.rbegin(); rIter != intData.rend(); rIter++)
        {
            cout << *rIter << "	";
        }
        cout << endl;
        cout << "size:" << distance(intData.begin(), intData.end()) << endl;
        //交换第一个元素和最后一个元素
        //list iterator
        //array[7]   array[0] array[6] array[7]---end
        iter_swap(intData.begin(), intData.end() - 1);   //最后一个元素的位置是end-1
        for (auto v : intData)
        {
            cout << v << "	";
        }
        cout << endl;
        //copy算法
        //copy(begin,end,begin)
        int array[3] = { 4,4,4 };
        vector<int> first = { 1,2,3 };
        //list<int> second;
        //copy(first.begin(), first.end(), second.begin());
        copy(array, array + 3, first.begin());
        for (auto v : first)
        {
            cout << v << "	";
        }
        cout << endl;
        //输出流型迭代器
        ostream_iterator<int> coutOject(cout);
        coutOject = 123;
        cout << endl;
        copy(first.begin(), first.end(), ostream_iterator<int>(cout));
        cout << endl;
        copy(first.begin(), first.end(), ostream_iterator<int>(cout, "	"));
        cout << endl;
        string str = "*";
        copy(first.begin(), first.end(), ostream_iterator<int>(cout, str.c_str()));
        //输入流型迭代器
        istream_iterator<int> endOfStream;        //无参构造的一个错误流
        istream_iterator<int> inputNum(cin);    //用来做输入
        while (inputNum != endOfStream)
        {
            first.push_back(*inputNum);
            ++inputNum;
        }
        cout << "Data:" << endl;
        for (auto v : first)
        {
            cout << v << "	";
        }
        cout << endl;
        return 0;
    }
  • 相关阅读:
    Intellij Idea 创建Web项目入门
    使用swagger作为restful api的doc文档生成
    SpringMVC中的参数绑定总结
    Spring注解@Resource和@Autowired区别对比
    java的(PO,VO,TO,BO,DAO,POJO)解释
    java有几种对象(PO,VO,DAO,BO,POJO)
    clone项目到本地
    修改虚拟机上Linux系统的IP地址
    虚拟机下CentOS 6.5配置IP地址的三种方法
    系统重启
  • 原文地址:https://www.cnblogs.com/creature-lurk/p/15252817.html
Copyright © 2011-2022 走看看