关于迭代器的问题
如何根据迭代器获取原始指针
例如std::list<A *> listA;
std::list<A *>::iterator it;
for(it=listA.begin()....)
{
A *pA=(A *)&*it;//网上说这个可以,但是这个真的不行,
}
有什么方法可以获得额,亲!!!!!!
[解决办法]
&(*it)应该也可以. 试试这个。
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*
[解决办法]
首先很高兴回答你的问题,按照你的描述,希望我的理解是正确的。有如下代码,希望对你又用。
/** 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;}
[解决办法]
std::list<A *> listA;std::list<A *>::iterator it;for(it=listA.begin()....){ A *pA=*it;//你容器里的元素是A*而不是A,所以不需要取地址}
[解决办法]
4楼正解了,你容器中的元素类型就是A*,并不是A,所以(*iter)就是一个A指针了;