C++之动态数组(Vector)中运用各类迭代器

迭代器按照定义分类:

正向迭代器:    容器类名::iterator  迭代器名;        依次向下遍历
反向迭代器:    容器类名::reverse_iterator  迭代器名;    依次向上遍历
常量正向迭代器:    容器类名::const_iterator  迭代器名;
常量反向迭代器:    容器类名::const_reverse_iterator  迭代器名;

-------------------------------------------------------------------------------------------------------------------------

迭代器按照功能分类:

正向迭代器,支持相互赋值、比较、自加、取内容等

双向迭代器,具有正向迭代器全部功能,支持自减

随机访问寄存器,具有双向迭代器的全部功能

不同容器的迭代器的功能: 

随机访问寄存器                        vector、deque

双向寄存器                                list、set /multiset、map /multimap

不支持迭代器寄存器                 stack、queue、priority_queue

C++迭代器(STL迭代器)iterator详解 (biancheng.net)

v.end(): 
指向向量最后一个元素之后的元素,一般用于正向迭代器
v.rend(): 
指向向量第一个元素之前的元素,一般用于反向迭代器
v.begin(): 
返回一个指向向量第一个元素的迭代器,用于正向输出动态数组中的元素
v.rbegin(): 
返回一个指向向量最后一个元素的反向迭代器,用于逆向输出动态数组中的元素
v.front(): 
引用容器的第一个元素
v.assign(first,last): 
新值替换旧值,定义了范围,first与last之间被替代
v.assign(n,val): 
给指定容器v分配了n次val值,从容器头开始替代
v.erase(pos): 
删除迭代器指向pos位置的指定元素
v.erase(first,last): 
删除容器first与last之间的内容
v.emplace(pos,val): 
在容器的pos位置处插入一个新元素val
v.capacity(): 
返回容器大小
v1.crbegin(): 
同rbegin(),只是适用于常量迭代器,不能被修改
v1.crend()、v1.cend()、v1.cbegin()类似
v.clear(): 
清空容器
v.hypot(): 
返回两个数的平方和的平方根
v.push_back(val): 
在容器末尾插入val
v.pop_back(): 
删除容器末尾的元素
v.insert(pos,val): 
在pos处插入元素val
v.insert(pos,n,val): 
在pos处连续插入n次元素val
v.insert(pos,first,last): 
在pos处连续插入first-last之间的内容,可用于容器拼接
v.swap(v1): 
交换容器 v 和 v1 里面的内容
v.resize(n): 
重置容器大小,一般是用于缩小容器容量
v.resize(n,val): 
重置容器大小,一般用于扩大容器容量,并将无元素的位置插入val值
v.data(): 
返回一个指向向量内部用于存储其元素的数组的指针
其余方法和list很多相似,详见请看: C++之链表list的方法总结_承诺$枷锁的博客-CSDN博客

#include 
#include 
#include 
using namespace std;
int main()
{
    //定义动态数组
    vector v{"hello","vector","string"}; //vector v(100);
    //定义正向迭代器
    vector::iterator it;
    //定义反向迭代器
    vector::reverse_iterator rit;
    for(it=v.begin();it!=v.end();++it){
        cout<<*it<<" ";                        //结果:hello vector string 
    }
    cout< v1;
    cout<<"================="< cv{1,2,3};
    //同rbegin(),只是适用于常量迭代器,不能被修改
    //v1.crend()、v1.cend()、v1.cbegin()类似
    vector::const_reverse_iterator crit=cv.crbegin();    //常量反向迭代器
    // *crit=5;//assignment of read-only location            
    cout<<*crit<

v.erase():删除迭代器指向的指定元素
erase函数的原型如下:
1)string& erase(size_t pos = 0, size_t n = npos);
erase(pos,n);        删除从pos开始的n个字符
2)iterator erase(iterator position);
erase(position);    删除position处的一个元素
3)iterator erase(iterator first, iterator last);
erase(first,last);    删除从first到last之间的字符(first和last都是迭代器)

    string str ("this string erase.");
    str.erase(4,7);
    cout<
this erase.
vector
this erase.

v.assign():为向量分配新值并替换旧值

assign函数原型如下:
assign(Iterator first,Iterator last);给容器定义了范围,first与last之间被替代,可用于容器给容器赋值
举例:v.assign(first,last);  

assign(size_type n,const value_type& val);  从容器v头部开始,替代n次val值
举例:v.assign(n,val);//次数,分配值    

    vector v1;
    cout<<"================="<
=================
vector
string
=================
c
string

你可能感兴趣的:(C++,c++)