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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/244810
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!