ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++第11课 迭代器与仿函数 (一)

2021-09-10 19:32:17  阅读:112  来源: 互联网

标签:11 begin 迭代 iterator iter C++ first cout


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 << "\t";
        iter++;
    }
    cout << endl;
    vector<int>::reverse_iterator rIter;
    for (rIter = intData.rbegin(); rIter != intData.rend(); rIter++)
    {
        cout << *rIter << "\t";
    }
    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 << "\t";
    }
    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 << "\t";
    }
    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, "\t"));
    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 << "\t";
    }
    cout << endl;
    return 0;
}

 

标签:11,begin,迭代,iterator,iter,C++,first,cout
来源: https://www.cnblogs.com/creature-lurk/p/15252817.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有