对c++ 中Iterator的疑惑

请在c++的STL中Iterator是什么,我现在所知道的是它具有类似于指针的功能,并且在容器中有很重要的作用,但它究竟是什么,能否给一段具体的代码。再问下可不可以获得STL的源代码呢?谢谢!

Iterator是访问器,类似与指针,具有指针相似的功能,访问器最重要的是给所有容器提供了一个通用的访问方法,Iterator是模板类,比如有个vector
std::vector<int> vec;
//元素操作之类的
std::vector<int>::iterator it=vec.begin();
while(it!=vec.end())
{//do something}
STL可以得到源代码,比如VC中有部分源代码,GCC代码实现比较好阅读,还有STL port项目之类的
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-05
int a[10]={1,2,3,4,5,6,7,8,9,10};
vector<int> v(a,a+9); //用数组初始化vector容器(a数组首指针,a+10数组尾指针的下一位)
vector<int>:: iterator it=v.begin(); //it是迭代器,指向v的第一个元素,相当于首指针
//begin()是vector自带的函数,返回指向第一个元素的迭代器
cout<<*it; //会输出1
it++; //迭代器自增,向后移动一个单位,结果是指向第二个元素
cout<<*it;//会输出2

//下面看一个输出容器全部元素的循环
for(vector<int>:: iterator it=v.begin();it!=v.end();++it){ //end()返回迭代器,指向最后一个元素的下一位
cout<<*it;
}

C++之父在C++程序设计语言一书上写了一个分配器,但是我有点疑惑的就是...
iterator 是一种编程模式,目的是避免成员变量的直接访问。每一个容器都有自己对应的iterator,而每个的实现都需要与其容器对应,无法共用。至于你说的断开的问题,这是事实。所以在每次使用是,都需要重新获取。举个例子,遍历vector是每次都要vector<X>::iterator it...而不能保存一个it来访问 ...

c++iterator
C++中的iterator是一种抽象概念,用于遍历容器中的元素。它是一种类似于指针的对象,可以指向容器中的元素并进行访问和操作。通过迭代器,我们可以方便地对容器中的元素进行遍历、插入和删除等操作。一、迭代器的概念 在C++中,迭代器是一种模板类,它提供了一种通用的方式来访问和遍历容器中的元素。迭代...

c++中迭代器iterator的本质是什么,是容器中的嵌套模板类吗
STL中迭代器的本质,是扮演容器与算法之间的桥梁,实现泛型指针功能。所有STL容器都配有自己的迭代器,算法通过迭代器访问容器元素,无需关心容器类型和访问方式。STL的核心在于数据容器与算法分离,通过迭代器将二者结合。以简易版vector为例,其迭代器实质为T*指针,增减操作直接在指针上进行,因vector底层...

设计模式(c++)笔记之二十二(Iterator模式)
描述概念:提供一种方法顺序访问一个聚合对象中各个元素,又不需暴露该对象的内部表示。Iterator模式中的对外接口可以灵活定义以适应客户成员的便捷使用,但基本接口通常在Iterator类中体现,类似于STL中的Iterator。实例:在公司中,项目经理需整理103个项目的详细信息,以便分析和优化支出。项目经理在查看技术...

C++ 中我运行erase()的时候 老是出现这个 看不懂啊
string的迭代器不能递减。改成:int main(){string str="This IS A example";for(string::iterator iter=str.begin(); iter!=str.end();){if(isupper(*iter))iter = str.erase(iter);elseiter++;}cout << str;}或 int main(){string str="This IS A example";str.erase(remove_if(...

c++ 中,我想用iterator库函数中的begin和end函数遍历一个数组,不知道错...
std::begin()和std::end()是C++11新特性,注意你的编译器是否支持 此外用C++11auto类型做迭代比较好

有关C++ STL的两个问题(有关时间复杂度)
第一个问题:advance函数用在“随机访问迭代器”上时,时间复杂度是常数,即O(1)。所谓随机访问迭代器,简单地说就是该迭代器支持加法和减法操作符。比如,std::vector::iterator就是一种random access iterator,而std::list::iterator就不是。两者区别在于:如果你有一个vector::iterator,变量名是...

为什么在C++中vector string对象不能直接输出,需要自己遍历,然后逐个...
一个原因是标准库不知道怎样才是最合适的输出方式,比如每个元素间要不要用回车分隔,还是用逗号分隔,再说即使不能直接输出,写起来也很简单,如果是C++11的话,写成 for (auto&& i:text) cout << i <<' ';就可以了 真的需要cout << text;这种写法的话,自己重载一个 operator<< 函数也是很...

C++调试报错:vector iterator incompatible一般原因是什么
1、类型不匹配,例如用int型的向量迭代器与char型的向量迭代器进行比对操作。2、 在erase操作后,没有将循环变量i指向修改后的向量迭代器,就继续循环,再与end()比较时断言出现。

关于C++ typedef list<类名>:iterator iterator;出错
加上typename就是告诉编译器先不管具体类型,等模板实例化的时候再确定吧 另外,模板实现分开写,也就是写在Property.cpp中,对于大多数编译器来说,连接时会告诉找不到符号,如果不是必须隐藏实现,最好写到.h里,或者使用支持external的编译器,具体请google:c++ template external ...

相似回答