码迷,mamicode.com
首页 > 编程语言 > 详细

C++ iterator双向类

时间:2019-01-26 00:48:15      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:ever   之间   tle   ane   .cpp   函数   插入   get   char   

C++五种迭代器之间的关系

迭代器作用 让容器和算法耦合, 或者说让数据和操作耦合

一、双向迭代器

List:元素有放入顺序,元素可重复;用链表实现
Map:元素按键值对存储,无放入顺序
Set:元素无放入顺序,元素不可重复;用平衡检索二叉树实现。

1.list构造函数

 ①list <int> c0; ②list <int> c1(3); 三个0 ③list <int> c2(5, 2);五个2  ④list <int> c4(c2);  ⑤list <int> c5 = { 1,3,5 };list<int> c5({1,2});

⑥list <int>::iterator c_iter=c4.begin(),list <int> c6(c_iter1,c_iter2)   ⑤int arr[5] = { 1,2,3,4,5 }; list<int> set1(arr, arr + 5); 

assign重赋值(清除列表中的元素,并将一组新元素复制到目标列表):

 ①c1.assign(7,4) 七个四 ②c1.assign({1,3,5});  c1.insert(arr,arr+3); ③ c1.assign(c_iter1,c_iter2); 

2.insert在链表c1某个位置c_iter插入(方法与assign类似) :

    ①c1.insert(c_iter,4);  ②c1.insert(c_iter,7,4) ;  ③c1.insert(c_iter,{5,6,7,8});  c1.insert(c_iter,arr,arr+3); ④c1.insert(c_iter,c_iter1,c_iter2); 

push_front(type val)、push_back(type val)头尾插入,pop_front()、pop_back()头尾删除;

3.remove(type val) 删除列表中所有值为val的元素。unique()删除重复的相邻元素。

iterator erase(iterator first, iterator last);  iterator erase(iterator where);共三种删除方式。

4.front()、back()返回头尾元素的引用 eg: c1.front()=56; 

size_type size() const;  bool empty() const;   swap : c1.swap(c2); swap(c1,c2); ; clear()

5.排序sort 将两个有序链表归并merge

c1.sort(c2)  c1.sort(c2,greater<int>) 对应c1.merge(c2)  c1.merge(c2,greater<int>)它会把c2删除;

技术分享图片
// list_class_list.cpp
// compile with: /EHsc
#include <list>
#include <iostream>

int main()
{
    using namespace std;
    
    list <int> lis= { 1,3,5,7,9 };

    /*  */ 
    lis.push_back(11); lis.push_front(18);  cout << "after push_back and lis.push_front  :";
    for (auto x : lis)
        cout << "  " << x; cout << endl ;

    lis.pop_back(); lis.pop_front();   cout << "after pop  :";
    for (auto x : lis)
        cout << "  " << x; cout << endl;

    lis.front() = -2; lis.back() = 19;     cout << "after lis.front=-2 and lis.back=19  :";
    for (auto x : lis)
        cout << "  " << x; cout << endl;

    list<int>::iterator iter = lis.begin();
    lis.assign(++iter, lis.end());  cout << "after assign(++iter,lis.end())  *iter "<<*iter<<"  :";
    for (auto x : lis)
        cout << x << "   ";  cout << endl;

    lis.insert(iter, 56);   cout << "after insert(iter,56)  *iter "<<*iter<<"   :  ";
    for (auto x : lis)
        cout << x << "   ";  cout << endl;

    lis.insert(iter, iter, lis.end());  cout << "after insert(iter ,iter,lis.end())  :  ";
    for (auto x : lis)
        cout << x << "  "; cout << endl;

    lis.erase(iter, lis.end());  cout << "after erase(iter,lisend())  :  ";
    for (auto x : lis)
        cout << x << "   "; cout << endl;

    lis.reverse();  cout << "after lis.reverse() :  ";
    for (list<int>::iterator it=lis.begin();it!=lis.end();it++)
        cout << *it << "   ";   cout << endl;

    lis.sort(); cout << "after lis.sort() :  ";
    for (auto x : lis)
        cout << x << "   ";  cout << endl;

    lis.sort(greater<int>());  cout << "after lis.sort(greater<int>())  : ";
    for (auto x : lis)
        cout << x << "   ";   cout << endl; 
    

    list<int> lis1= { 12,36,45,48 };
    lis.sort(); lis1.sort();
    lis.merge(lis1);  cout << "after lis.merge(lis1)  lis1.size() "<<lis1.size()<<"  :";
    for (auto x : lis)
        cout << x << "   "; cout << endl;
    
}
View Code

 技术分享图片

set函数一般处理三种 (type val)元素值 ({1,2,,})数组 (iter1,iter2)迭代器始终

1.set构造函数 因为元素唯一 就没有②③种情况;

 insert(val) 因为内部自行有序,不必特在某处s_iter插入,且没有②

 iterator find(val) 返回对应值的迭代器 

  erase(val);  erase(iterator where);  erase(iter1,iter2);

size() swap() empty()  clear()

 1.map声明赋值  #include<map> map<char,int>mp; mp[m]=12; mp[r]=20; 可覆盖

 访问 for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) cout<<it->first<<it->second; it->first和it->second键与值

 find(type key)返回键值key对应的迭代器

 erase也有三种(key)、(it)、(first,last)

size() empty() swap() clear()

 二、stack、queue

bool empty() const;   size_type size() const; 

void pop();删除栈顶元素  void push(const Type& val);入栈    type& top();返回栈顶元素的引用&。

queue与stack类似,仅把top改为front()和back()返回队列queue头、尾前部第一个元素的引用。

C++ iterator双向类

标签:ever   之间   tle   ane   .cpp   函数   插入   get   char   

原文地址:https://www.cnblogs.com/xuchuan/p/10322373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!