STL里面迭代器就像指针一样,有了迭代器我们可以更加方便的进行访问集合里面的元素
下面分别对各个容器进行分析
1 list
#include<list> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ list<int>ls; list<int>::iterator it; // push_back for(int i = 0 ; i < 10 ; i++) ls.push_back(i); // 遍历 puts("遍历"); for(it = ls.begin() ; it != ls.end() ; it++) printf("%d " , *it); printf("\n\n"); // 插入 puts("插入"); it = ls.begin(); /* 先创建一个新的节点,然后把前一个指向新的节点 新的节点指向当前节点*/ ls.insert(it , -1); for(it = ls.begin() ; it != ls.end() ; it++) printf("%d " , *it); printf("\n\n"); // 删除 puts("删除"); it = find(ls.begin() , ls.end() , 5); ls.erase(it); /*把前一个元素指向当前的下一个元素,那么当前这个元素就被删除*/ for(it = ls.begin() ; it != ls.end() ; it++) printf("%d " , *it); printf("\n\n"); /* list的迭代器是循环的。begin往前就是end end往后就是begin,但是注意的是end表示的是最后一个元素的下一个位置*/ it = ls.begin(); printf("%d\n" , *it); it--;// it 变成了end it--;// it 指向了最后一个元素 printf("%d\n" , *it); puts("--------------"); it = ls.end(); it--;// it 指向了最后一个元素 printf("%d\n" , *it); it++;// it 指向了end it++;// it 指向了begin printf("%d\n" , *it); return 0; }
2 vector
#include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ vector<int>v; vector<int>::iterator it; // push_back for(int i = 0 ; i < 10 ; i++) v.push_back(i); // 遍历 puts("遍历"); for(it = v.begin() ; it != v.end() ; it++) printf("%d " , *it); printf("\n\n"); // 插入 puts("插入"); it = find(v.begin() , v.end() , 5); /* 当前这个位置之后的所有元素都往后移动,然后在 当前位置插入*/ v.insert(it , -1); for(it = v.begin() ; it != v.end() ; it++) printf("%d " , *it); printf("\n\n"); // 删除 puts("删除"); it = find(v.begin() , v.end() , 5); /* 当前这个位置之后的所有元素都往前移动,然后删了 当前元素*/ v.erase(it); for(it = v.begin() ; it != v.end() ; it++) printf("%d " , *it); printf("\n\n"); // vector的迭代器提供指向任何位置的功能 it = v.begin(); printf("%d\n" , *it); it = it+3; // it指向了当前位置的后面3个的地方 printf("%d\n" , *it); it = v.end(); it = it-3; // it指向了当前位置的前面3个的地方 printf("%d\n" , *it); return 0; }
3 map
#include<map> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ // map是会自动按照key值来排序 map<int , int>mp; map<int , int>::iterator it; // push_back for(int i = 1 ; i <= 10 ; i++) mp[i] = i; mp.insert(make_pair(-1 , 11)); // 遍历 puts("遍历"); for(it = mp.begin() ; it != mp.end() ; it++) printf("%d->%d " , it->first , it->second); printf("\n\n"); // 删除 puts("删除"); /* 找到key值为5的迭代器,然后删除,如果没有找到是 指向end*/ it = mp.find(5); mp.erase(it); for(it = mp.begin() ; it != mp.end() ; it++) printf("%d->%d " , it->first , it->second); printf("\n\n"); return 0; }
4 set
#include<set> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ // set会自动的根据值进行排序 set<int> s; set<int>::iterator it; // push_back for(int i = 1 ; i <= 10 ; i++) s.insert(i); // 遍历 puts("遍历"); for(it = s.begin() ; it != s.end() ; it++) printf("%d " , *it); printf("\n\n"); // 因为set是自动的排序,所以和插入到哪个位置没有关系 // 删除 puts("删除"); it = s.find(5); // 如果没有找到就是end s.erase(it); for(it = s.begin() ; it != s.end() ; it++) printf("%d " , *it); printf("\n\n"); return 0; }