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; } }
来源:https://www.cnblogs.com/guozhikai/p/6115522.html