读书人

关于迭代器的有关问题

发布时间: 2012-10-19 16:53:36 作者: rapoo

关于迭代器的问题
如何根据迭代器获取原始指针
例如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指针了;

读书人网 >C++

热点推荐