list的迭代器的使用
#include <cstdio> #include <list> using namespace std; struct DATA{ int a; float f; }; void init(list<DATA> &list) { DATA datas[] = {{2, 2.2}, {3, 3.3}, {4, 4.4}}; for (int i = 0; i < sizeof(datas)/sizeof(datas[0]); i++) { list.push_back(datas[i]); } } void showByRef(DATA &data) { printf("show by ref:a = %d, f = %.2f\n", data.a, data.f); } void showByPoint(DATA *data) { printf("show by point:a = %d, f = %.2f\n", data->a, data->f); } int main() { list<DATA> myList; list<DATA>::iterator iter; DATA *pData = NULL; init(myList); for(iter = myList.begin(); iter != myList.end(); iter++) { showByRef(*iter); //showByPoint(iter); //iter不是指针,这里不能作为参数传入 showByPoint(&(*iter)); //*iter运算之后是一个对象实例,再取&可以得到对象的地址 printf("show in main:a = %d, f = %.2f\n", iter->a, iter->f); //迭代器的->运算符也是重载过的 } return 0; }
运行结果:
show by ref:a = 2, f = 2.20 show by point:a = 2, f = 2.20 show in main:a = 2, f = 2.20 show by ref:a = 3, f = 3.30 show by point:a = 3, f = 3.30 show in main:a = 3, f = 3.30 show by ref:a = 4, f = 4.40 show by point:a = 4, f = 4.40 show in main:a = 4, f = 4.40