list<CPoint> l;
l.push_back( CPoint(1,2) );
l.push_back( CPoint(30,40) );
l.push_back( CPoint(4,6) );
l.push_back( CPoint(70,80) );
CPoint * point = 0;
for ( list<CPoint>::iterator iter = l.begin();
iter != l.end();
iter++)
{
cout << iter->x << " , " << iter->y << endl;
// compilation error, I can't typcast it like below?
point = (CPoint *) iter;
}
上面的问题是如何将循环中的iter
打印到实际的数据结构指针?这样我就可以编写像point.x
,point.y
这样的代码,至少可以说。
以上是我写的演示代码,但实际上我在搜索功能中有这个代码。如果在列表中找到一个项目,它将返回指向该项目的指针,否则为NULL。为了获得指针,我需要将迭代器解引用回底层数据结构指针但是如何?感谢。
答案 0 :(得分:3)
要修复语法错误,需要取消引用迭代器,然后从下面的对象中获取地址:
point = &*iter;
你最好只使用std::find/std::find_if并存储从std :: list返回的迭代器。
auto it = std::find_if(l.begin(), l.end(),
[](const CPoint& cp) { return cp.x == 1 && cp.y == 2; } );
if (it != l.end()) // test iterator to see is desired CPoint is found
{
std::cout << (*it).x << " " << (*it).y << std::endl;
}