gpt4 book ai didi

c++ - 打印一个列表给出错误,说 Iterator is not decrementable

转载 作者:行者123 更新时间:2023-11-30 01:40:32 26 4
gpt4 key购买 nike

我正在尝试创建一个成员函数,该函数应该使用列表来复制堆栈。所以我必须以相反的顺序打印列表的元素。我的头文件中有一个私有(private)列表声明为:

class miniStackLT {
private:
list<T> content;

我有该功能的以下代码:

template <typename T>
void miniStackLT<T>::PrintStack(){
list<T>::iterator iter;
iter = content.end();
iter--;
while (iter != content.end()) {
cout << *iter << " | ";
iter--;
}
}

当我运行程序时,我检查了 so 列表的大小,它告诉我正确的数字,但是当我打印它时,它打印了正确的元素,然后我得到一个错误,指出列表迭代器不可递减。

是什么导致了这个错误?我试过弄乱循环和迭代器的起点和终点,但我一直收到错误。

编辑:我也用过

template <typename T>
void miniStackLT<T>::PrintStack(){
list<T>::iterator rit;
for (auto rit = content.rbegin(); rit != content.rend(); ++rit){
cout << *iter << " | ";
}
}

但我仍然得到错误。

最佳答案

您的代码有两个问题。首先 while (iter != content.end()) 将始终为真,因为您正从 content.end() 向后走。其次,即使您将其更改为 while (iter != content.begin()) 您也会错过列表中的第一个迭代器

向后遍历列表的方法是使用反向迭代器。 std::listrbegin()rend() 给你开始和结束迭代器但是它们向后遍历列表所以 rbegin() 为您提供列表中的最后一个元素。要遍历列表,您只需使用类似的东西

for (auto rit = content.rbegin(); rit != content.rend(); ++rit)

您也可以将其合并并使用基于范围的 for 循环。使用代码 from here通过 Prikso NAI你将能够拥有

for (const auto& e : reverse(content))
std::cout << e << " | ";

关于c++ - 打印一个列表给出错误,说 Iterator is not decrementable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43073494/

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