迭代器初步
迭代器就是专门用来访问容器的指针,简单来讲,迭代器就是指针
迭代器中两个重要成员函数
1.begin,begin函数返回容器中第一个成员的迭代器(地址),
2.end,end函数返回容器最后一个元素的下一个位置的迭代器(地址),所以end返回的迭代器也叫尾后迭代器
3.如果容器为空,那么begin和end都返回尾后迭代器
迭代器遍历string
void traversestringbyitor()
{
string s="123456778";
for (string::iterator it=s.begin();it!=s.end();++it)
{
cout<<*it<<endl;//对迭代器解引用
}
}
每个容器中都有迭代器,但是使用容器类型加上作用域运算符进行区分
vector<int>::iterator it;//vector<int>的迭代器
vector<string>::iterator it;//vector<string>的迭代器
string::iterator it;//字符串的迭代器
const_iterator迭代器
C++中,可以用const_iterator来遍历容器,const_iterator指向的元素只读,不可修改,但是const_iterator本身可以变,类似于指向const变量的指针
当我们修改const_iterator指向的元素时会报错
void testconstitor()
{
vector<int> v(10,-5);
vector<int>::const_iterator it=v.begin();
*it=1;
}
使用const_iterator遍历const vector<int>
void testconstitor()
{
const vector<int> cv(10,-5);
for (vector<int>::const_iterator cit=cv.begin();
cit!=cv.end();++cit) {
cout<<*cit<<endl;
}
}
用迭代器遍历string时,begin返回iterator,遍历const vector<int>时,begin返回const_iterator。
所以,begin可以遍历const容器对象,也可以遍历非const容器对象,其返回值视容器对象的类型而定(对象是const,返回const_iterator,非const,返回iterator)
如果容器对象的类型不是const的,那么用iterator和const_iterator均可,如果是const的,只能用const_iterator遍历
使用const_iterator遍历vector<int>
void testconstitor()
{
vector<int> v(10,-5);
for (vector<int>::const_iterator it=v.begin();
it!=v.end();++it) {
cout<<*it<<endl;
}
}
结果同上
如果用iterator去遍历const容器对象,无法编译通过(因为这样可以通过迭代器修改容器中的元素,违背const变量无法修改的原则)
void testconstitor()
{
const vector<int> cv(10,-5);
for(vector<int>::iterator it=cv.begin();
it!=cv.end();++it){
cout<<*it<<endl;
}
}
使用迭代器对已排序的vector进行二分查找
int searchbyitor(const vector<int> nums, int target)
{
vector<int>::const_iterator beg=nums.begin();
vector<int>::const_iterator end=nums.end();
vector<int>::const_iterator mid=beg+(end-beg)/2;
int res=0;
while(beg!=end) {
if (*mid==target) {
cout<<"find it"<<endl;
res=*mid;
break;
}
else if (*mid>target) {
end=mid;
}
else {
beg=mid+1;
}
mid=beg+(end-beg)/2;
}
if (res!=target) cout<<"not find it"<<endl;
return res;
}
当调用searchbyitor({1,2,3,4,5},-1);时
输出结果
当调用searchbyitor({1,2,3,4,5},1)或者searchbyitor({1,2,3,4,5},5)时
输出结果
当调用searchbyitor({1,2,3,4,5},2)时
输出结果
证明该程序基本可靠。上述程序用的迭代器是const_iterator
参考:
《C++ Primer》
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出