STL编程,关于list的,帮忙解释一下下面这语句的含义,多谢了!

std::list<CProcessStatus*>::iterator iter = m_listProcess.begin();

我只是由一些模糊的概念,帮忙具体解释一下哈,多谢了!

首先,你用过数组,知道数组可以用 [ ] 操作符来访问其中一个特定的元素。
如果要对数组进行遍历,你会 for(int i = xxx; i < xxx; ++i) 然后在循环里面把数组的每个元素都艹过去。

仔细想想你在操作数组元素的时候,是怎么整的………………比如数组是a,你就 a[i] 对吧?
这样在c++编译器看来,都是每次指定要操作“第几个元素”。

好,再来另一种方法。指针,你有一个 int a[5]; 于是你可以 int* p = a; int* pe = p + 5;
然后就开始
for(; p != pe; ++p) 之后在循环里面用 *p 来操作元素。

继续,因为这是针对数组的,所以可以这么用。如果是针对链表的呢?可以用后一种方法不能用前一种方法对吧:因为在链表里面,要找第n个元素,很花时间。

那么好了,后一种方法如果被抽象出来,就是首先给当前位置一个初始值,然后检测这个当前位置是不是走到头了,没有的话就开始执行循环里的代码,每次循环都把当前位置往后移动一格。

迭代器就是这么一个东西。

你现在有一个std::list<CProcessStatus*>类型的对象,设想一下如果你有一个 CProcessStatus* [] 数组,你会操作对吧。那我就以数组为例,告诉你都是什么意思:
首先假设这个数组有5个元素。
那么,
std::list<CProcessStatus*>::iterator iter = m_listProcess.begin();
在数组的情况就是
CProcessStatus* iter = &m_listProcess[0];

然后
std::list<CProcessStatus*>::iterator iterEnd = m_listProcess.end();
就是
CProcessStatus* iterEnd = &m_listProcess[5];

之后你就可以弄这么一个循环:
for (; iter != iterEnd; ++iter)

这个语法就在用数组或者迭代器的情况下都可以了。
对迭代器所指向的对象进行访问,方法和指针一样:用星号操作符或者箭号。 *iter 或者 iter->blahblah

用这种方法,就在不同的容器之间抽象出来了一种给你遍历起来比较方便的接口,不需要知道容器的具体实现,链表也好数组也好二叉树也好,反正你最后可以用一种统一的方式对其进行遍历了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-22
首先, m_listProcess 是 类(型)std::list<CProcessStatus*>定义的一个变量,及对象.
该对象是一个list类的实例,管理了一个元素是类(型)CProcessStatus*构成的列表(类似数组).
对该对象进行访问时需要定位访问位置,访问第几个元素. 定义位置对象为iter
访问位置同样是一种类型, 定义方法是std::list<CProcessStatus*>::iterator iter;

为了正确使用iter, 定义同时初始化为 m_listProcess的第一个元素位置 m_listProcess.begin()
相似回答