gpt4 book ai didi

c++ - 比较两个不同列表的内容

转载 作者:行者123 更新时间:2023-11-30 02:23:10 25 4
gpt4 key购买 nike

我正在尝试比较两个不同列表的内容。我正在使用迭代器循环遍历列表。我正在检查列表 1 中的最后一个元素是否出现在列表 2 中。这是代码片段

            /* This section will loop through the list to make sure that the line segment that was added to the 
* contour path is updated to be visited
*/
for(plf::colony<edgeLineShape>::iterator lineIterator = p_lineList->begin(); lineIterator != p_lineList->end(); lineIterator++)
{
edgeLineShape temp = *lineIterator;
if(temp == *(pathContour.back()))
{
lineSet = true;
lineIterator->setVisitedStatus(true);
break;
}
}

pathContour 定义为 std::vector<edgeLineShape> pathContour .这是棘手的部分,我正在比较两个不同的容器。实际上是两种不同的数据结构。值得庆幸的是,plf::colony 数据类型满足 C++ 容器和其他容器的要求。

当我去编译时,我可能会在以下行出现错误:

if(temp == *(pathContour.back())

这是这一行的错误:

error: no match for 'operator*' (operand type is '__gnu_cxx::__alloc_traits<std::allocator<edgeLineShape> >::value_type {aka edgeLineShape}')

我目前对迭代器的 * 运算符的理解是,它将取消引用迭代器,就像使用 * 运算符取消引用指针的方式一样?

这不对吗?

最佳答案

因为 back 返回的是引用,而不是迭代器(注意错误内容:(operand type is 'blablabla {aka edgeLineShape}'))。你可以像平常一样比较它:

if (temp == pathContour.back())

但实际上,temp 不是必需的,因为您只是在这里使用它,所以您可以这样做

if (*lineIterator == pathContour.back())

此外,如果您使用的是 C++11 或更高版本,您应该查看 auto,它可以将此转换为:

for(plf::colony<edgeLineShape>::iterator lineIterator = p_lineList->begin(); lineIterator != p_lineList->end(); lineIterator++)

进入这个:

for (auto lineIterator = p_lineList->begin(); lineIterator != p_lineList->end(); lineIterator++)

或 foreach,可以将其压缩为更简洁:

for (auto lineIterator : p_lineList)

关于c++ - 比较两个不同列表的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437671/

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