gpt4 book ai didi

C++如何在函数内创建和返回迭代器?

转载 作者:行者123 更新时间:2023-12-05 01:03:24 25 4
gpt4 key购买 nike

我尝试编写一个函数,该函数接收一个列表和一个索引,并将一个迭代器返回到从该索引开始的列表。

功能:

template<class T>
typename std::list<T>::iterator begin_it_at_index(list<T> list_to_iterate_on, const int index)
{
return next(list_to_iterate_on.begin(), index);
}

当我调用函数来获取迭代器时,我确实在正确的索引处获得了我想要的第一个元素,但是当我在迭代器上执行“++”时,它只是跳出列表而不是进入下一个元素。

代码:

list<int> temp = {10,20,50,100};
for (auto it = begin_it_at_index(temp, 1); it != temp.end(); ++it)
{
cout << *it << endl;
}

输出:

20
74211408
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我做错了什么?

最佳答案

您需要将容器通过引用传递给begin_it_at_index。否则,将获取值拷贝,并且返回的迭代器无效,因为函数中的本地 list_to_iterate_on 超出范围。

也就是说,

template<class T>
typename std::list<T>::iterator begin_it_at_index(
list<T>& list_to_iterate_on,
const int index
)

是一个修复。

关于C++如何在函数内创建和返回迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74288310/

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