【C++ 11 -17】之迭代器的簡介

【C++ 11 -17】之迭代器的簡介

一、迭代器 vector 的簡介

迭代器是一種遍歷容器內元素的 數據類型,這種數據類型有點像指針,我們理解的時候就理解爲迭代器用來指向容器中的某個元素。string,vector,[],很少用[],更常用的訪問方式就是迭代器(更通用)。通過迭代器,我們就可以讀容器中的原始值,讀string中的每個字符,還可以修改某個迭代器所指向的元素值。++ ,-- list map ,儘量學會用迭代器來訪問容器中的元素。

二:容器的迭代器類型

vector<int> iv = { 100,200,300 };
vector<int>::iterator iter;//定義迭代器,也必須是vector<int>

    大家在理解的時候,就把整個的 vector<int>::iterator 理解成一個類型,這種類型就專門應用於迭代器。
    當我們用這個類型定義一個變量的時候,這個變量就是迭代器,這裏iter這個變量就是迭代器。

 三:迭代器begin()/end()操作,反向迭代器rbegin()/rend()操作

  •  begin()/end()用來返回迭代類型。
  • rebegin()/rend()用來返回 迭代類型

   begin()返回一個迭代器類型(大家就理解成返回一個迭代器);

iter = iv.begin();//如果容器中有元素,則begin()返回迭代器,指向的是容器中的第一個元素。
                  //相當於 iter指向了iv[0];

 end():返回一個迭代器類型(大家就理解成返回一個迭代器)

iter = iv.end();//end返回的迭代器指向並不是末端元素。而是末端元素的後邊,拿這個後邊怎麼理解?
                //我們就理解成end()指向的是一個不存在的元素。

如果迭代器爲空,那麼迭代器begin和end()返回的迭代器就相同

    vector<int> iv2;
    vector<int>::iterator iterbegin = iv2.begin();
    vector<int>::iterator iterend = iv2.end();
    if (iterbegin == iterend)
    {
        cout << "容器v2爲空" << endl;
    }

 迭代器遍歷for語句

vector<int> iv = { 100,200,300 };//定義一個容器
for (vector<int>::iterator iter = iv.begin();iter!= iv.end();iter++)
{
   cout << *iter << endl;//100,200,300
}
//反向迭代器:大家想從後往前遍歷一個容器,那麼反向迭代器就比較方便。
//反向迭代器(逆向迭代器)用的rbegin()/rend();
//rbegin():返回一個反向迭代器,指向反向迭代器的第一個元素;
//rend():返回一個反向迭代器,指向反向迭代器最後元素的下一個位置。
 
for (vector<int>::iterator riter = iv.rbegin(); riter != iv.rend(); riter++)
{
  cout << *riter << endl;//300,200,100
}


四、迭代器運算符


    //a) *iter:返回迭代器iter所指向元素的引用。必須要保證這個迭代器指向的是有效的元素容器
    //不能指向end(),因爲end()是末端元素的後邊。就是end()指向的是一個不存在的元素。
    vector<int> iv3 = {100,200,300};
    vector<int>::iterator iter = iv3.begin();
    cout << *iter << endl;//正確
 
    vector<int>::iterator iter = iv3.end();
    cout << *iter << endl;//異常 段錯,內存錯誤
 
 
    //b)++iter:iter++:讓迭代器指向容器中下一個元素;已經指向end()的時候不能再++;
    vector<int> iv4 = { 100,200,300 };
    vector<int>::iterator iter = iv4.end();
    //iter++;
    ++iter;
    cout << *iter << endl;//程序錯誤終止,異常終止
    vector<int>::iterator iter = iv4.begin();
    //iter++;
    ++iter;
    cout << *iter << endl;//正常 200
 
    //c) --iter和iter--:讓迭代器指向容器中的上一個元素。指向開頭元素,就不能再--
    vector<int>::iterator iter = iv4.begin();
    //iter--;
    //cout << *iter << endl;//錯誤終止
    vector<int>::iterator iter = iv4.end();
    iter--;
    cout << *iter << endl;//300 正確

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章