gpt4 book ai didi

c++ - 将容器重置为迭代器 "points"

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

假设我有一个 std::list myList 和一个迭代器 myIt,我用它来指向列表中的某个元素。

现在我对myList 做了一个copiedList 的浅拷贝(所以我可以重新排序)。同样,我可以复制 myItcopiedIt,但是它仍然引用 myList 而不是 copiedList,这意味着我不能明智地将它与 copiedList.end() 进行比较,因为我可能已经修改了该列表。

是否有(标准)方法重新设置 copiedIt 以引用copiedList?只要我没有对拷贝进行任何更改,这在语义上应该是有效的。

我目前的解决方案是使用原始迭代器来 std::find 列表拷贝中指向的元素,但是虽然这有效并且不会导致任何问题,但它似乎不够优雅。

最佳答案

您可以使用 std::nextstd::distance,如下所示:

template <class Container>
typename Container::iterator reseat(typename Container::iterator it, const Container &source, Container &target)
{
return std::next(target.begin(), std::distance(source.begin(), it));
}

在散文中:找到 it 与其容器开头的距离,并使用迭代器指向新容器中相同距离的元素。

这可以很容易地概括为允许 sourcetarget 具有不同的类型。通过稍多一些工作,也可以泛化为常量迭代器。

关于c++ - 将容器重置为迭代器 "points",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066793/

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