• 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;
    }
  • 相关阅读:
    CAP理论中的P到底是个什么意思?
    网络分区是什么
    SQL中的where条件,在数据库中提取与应用浅析
    golang 数据库开发神器 sqlx使用指南
    2017-07-08( bzip2 bunzip mount)
    2017-07-07(zip unzip gzip gunzip)
    2017-07-06(grep man apropos )
    2017-07-05 (whereis which find)
    001
    009-变量测试
  • 原文地址:https://www.cnblogs.com/creature-lurk/p/15252817.html
Copyright © 2020-2023  润新知