c++ list容器的有关问题

c++ list容器的问题

#include <iostream>
#include <list>
using namespace std;
int main()
{
   list<int> lis;
   for(size_t ix = 1; ix <= 4; ix++)
{
lis.insert(lis.begin(),ix);//在链表欠一次插入元素
}
   list<int>::iterator it1 = lis.begin(),it2 = lis.end();//声明迭代器
    //问题来了,现在我想输出it1 it2指向的空间地址怎么办
    cout<<it1<<" "<<it2<<endl;//报错
    cout<<lis.begin()<<" "<<lis.end()<<endl;//居然也报错
    //求解
}

------解决方案--------------------
Quote: 引用:

cout 不能直接输出iterator,误人子弟了c++ list容器的有关问题
改下

for(list<int>::iterator it1 = lis.begin(); it1 != lis.end(); ++it1) {
    cout << &it1 << " " << endl;
}

------解决方案--------------------
好像还是有问题,上面的方法显示的地址一样

cout << &it1.begin() << endl;
cout << &it1.rbegin() << endl;

不过调试查看这内存地址,又没有存储指向的数值
------解决方案--------------------
    list<int> lis;
    for(size_t ix = 1; ix <= 4; ix++)
    {
        lis.insert(lis.begin(),ix);//在链表欠一次插入元素
    }
    list<int>::iterator it1 = lis.begin(),it2 = lis.end();// 声明迭代器 it2指向的是最后一个元素的下一个(是一个无效位置,不能访问,只是做哨兵使用)
    //问题来了,现在我想输出it1 it2指向的空间地址怎么办
    cout<< &(*it1)  <<endl;  // it1是迭代器对象,不能直接cout输出,先用*解引用取到对象,然后再用&取对象地址,
    cout<< &(*lis.begin()) <<endl;// 这个同理