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

 

posted @ 2018-03-06 09:41  镜水洞天  阅读(391)  评论(0编辑  收藏  举报