gpt4 book ai didi

c++ - 如何将迭代器类型转换为其原始结构

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:24 25 4
gpt4 key购买 nike

        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.xpoint.y 之类的代码。

上面是我写的演示代码,但实际上我在搜索功能中有这段代码。如果在列表中找到一个项目,它将返回指向该项目的指针,否则返回 NULL。为了取回该指针,我需要将迭代器取消引用回到底层数据结构指针,但是如何呢?谢谢。

最佳答案

要修复语法错误,您需要取消引用迭代器,然后从下面的对象中获取地址:

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;
}

关于c++ - 如何将迭代器类型转换为其原始结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19206064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com