迭代器基本


begin()首迭代器,end()尾迭代器。對begin()解引用指向首元素的引用,end()解引用指向尾元素的下一個位置(不存在的地方)。

如果首位迭代器相等,則代表容器為空。對於迭代器,都有==的!=但是不一定有<,>,所有要避免使用大小於。

 

 

下面將首單次大寫

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::string str = "Lolita is a beautiful girl";

    if(str.begin() != str.end()) //確保string非空
    {
        for(auto it = str.begin();it!=str.end()&&!isspace(*it);++it)
        {
            if(islower(*it))
                *it = toupper(*it);
        }
    }

    std::cout<<str<<std::endl;
}

 

 迭代器類型

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> strVec ;
    strVec.push_back("C++");
    strVec.push_back("是中國的");
    strVec.push_back("");
    strVec.push_back("不是日本的");

    for(auto it=strVec.cbegin();it!=strVec.cend()&&!it->empty();++it)
    {
        std::cout<<*it;
    }
    std::cout<<std::endl;
}

//std::vector<std::string>::iterator it ; //使用begin()獲得
//std::vector<std::string>::const_iterator it ;//使用cbegin()獲得

 

迭代器副作用

但凡使用了迭代器的循環體,都不要向迭代器所屬容器添加元素,否則會使迭代器失效;

 

string和vector提供了更多的迭代器運算

 

 

兩個迭代器相減得到的是一個有符號類型的數

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> strVec ;
    strVec.push_back("C++");
    strVec.push_back("是中國的");
    strVec.push_back("");
    strVec.push_back("不是日本的");

    std::cout<<strVec.cbegin()-strVec.cend()<<std::endl;
    std::cout<<strVec.cend()-strVec.cbegin()<<std::endl;
}

 

二分法查找

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<unsigned> intVec ;
    for(unsigned i=0;i<100;i++)
    {
        intVec.push_back(i);
    }

    auto begin = intVec.cbegin();
    auto end = intVec.cend();
    auto mid = begin + (end-begin)/2 ;

    unsigned su = 78 ;
    while(mid != end && *mid != su)
    {
        if(su < *mid)
            end = mid ;
        else
            begin = mid+1 ;

        mid = begin + (end-begin)/2 ;
    }
    if(mid != end)
    {
        std::cout<<"已經找到"<<std::endl ;
        std::cout<<*mid<<std::endl;
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM