首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于迭代器的有关问题

2012-10-19 
关于迭代器的问题如何根据迭代器获取原始指针例如std::listA * listAstd::listA *::iterator itfor(

关于迭代器的问题
如何根据迭代器获取原始指针
例如std::list<A *> listA;
std::list<A *>::iterator it;
for(it=listA.begin()....)
{
  A *pA=(A *)&*it;//网上说这个可以,但是这个真的不行,
}

有什么方法可以获得额,亲!!!!!!

[解决办法]
&(*it)应该也可以. 试试这个。

C/C++ code
    int a[] = {10,9,8,7,6,5,4,3,2,1};    size_t size = sizeof(a)/sizeof(a[0]);    std::list<int> l(a, a+size);    std::list<int>::iterator it = l.begin();    int* p = it.operator->(); // p -> 10
[解决办法]
A *pA=(A *)&*it;为何要取地址,*it就是A*
[解决办法]
首先很高兴回答你的问题,按照你的描述,希望我的理解是正确的。有如下代码,希望对你又用。
C/C++ code
/** FileName:source.cpp* Author:宁采臣* Date:2012/10/12* QQ:535064959*/#include <iostream>#include <list>#include <algorithm>#include <iterator>using namespace std;struct Test{    int a;};int main(){    list<Test *> testList;    testList.push_back(new Test);    testList.push_back(new Test);    testList.push_back(new Test);    testList.push_back(new Test);    testList.push_back(new Test);    testList.push_back(new Test);    list<Test *>::iterator listIterator;    int i = 0;    for (listIterator = testList.begin(); listIterator != testList.end(); ++listIterator)    {        // get original pointer        Test *p = *listIterator;        p->a = i++;    }    for (listIterator = testList.begin(); listIterator != testList.end(); ++listIterator)    {        Test *p = *listIterator;        cout<<p->a<<" ";    }    cout<<endl;    // print address    copy(testList.begin(), testList.end(), ostream_iterator<Test *>(cout, " "));    return 0;}
[解决办法]
C/C++ code
std::list<A *> listA;std::list<A *>::iterator it;for(it=listA.begin()....){  A *pA=*it;//你容器里的元素是A*而不是A,所以不需要取地址}
[解决办法]
4楼正解了,你容器中的元素类型就是A*,并不是A,所以(*iter)就是一个A指针了;

热点排行