gpt4 book ai didi

c++ - 返回 const_iterator 时出错

转载 作者:行者123 更新时间:2023-11-28 00:29:57 24 4
gpt4 key购买 nike

当我尝试引用常量迭代器时出现错误。我希望能够返回 findntoLast 迭代器中的迭代器,而不是通过从新引用迭代到链表末尾来显示链表的值。

//Main.cpp
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <list>
#include <cstdlib>
#include <forward_list>

using std::forward_list;
typedef std::forward_list<int>::const_iterator constListIt;

#include "LinkedListQ2.h"

int main()
{
forward_list<int> myList;
for ( size_t i = 0; i < 20; i++)
myList.push_front(i);
constListIt myListIt = myList.begin();
for( myListIt; myListIt != myList.end(); myListIt++)
cout << *myListIt << endl;
constListIt newListIt = findntoLast(myList, 5);

while(newListIt != myList.end())
{
cout << *newListIt << endl;
newListIt++;
}
return 0;
}

/* LinkedListQ1.h*/
#ifndef LINKED_LIST_Q1_H_
#define LINKED_LIST_Q1_H_
#include <iterator>
using std::next;
#include <cstdlib>
#include <forward_list>
using std::forward_list;

template<typename T>
typename std::forward_list<T>::const_iterator findntoLast( forward_list<T> sList, size_t count )
{
typedef std::forward_list<T>::const_iterator sListIterator;
sListIterator newList = sList.begin();

for(size_t increment = 0; increment < count -1; increment++)
{
newList++;
}

return newList;
}
#endif

最佳答案

template<typename T>
typename [...]::const_iterator findntoLast( forward_list<T> sList, [...])

该参数按值传递。这意味着您的 findntoLast 在原始列表的拷贝 上工作。当函数返回时,该拷贝被销毁。所以任何引用它的迭代器都变得无效。

通过 const 引用获取列表,该问题应该消失。

您还缺少 typedef 中的 typename:

typedef typename std::forward_list<T>::const_iterator sListIterator;

最后看看std::advance ,它已经完成了您所需要的(此外,如果您更改了基础集合类型,它将利用随机访问迭代器)。

关于c++ - 返回 const_iterator 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23328447/

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