gpt4 book ai didi

C++ const_iterator 不可取消引用?

转载 作者:行者123 更新时间:2023-11-30 04:12:52 26 4
gpt4 key购买 nike

我在尝试使用 const_iterators 时收到运行时错误。错误是:列表迭代器不可取消引用。我知道不能取消引用 const_iterator 以将值分配到列表中,但我试图取消引用迭代器以访问列表中的值。我正在使用 Visual Studio 2010 专业版。

我对此进行了相当多的研究,但没有发现任何可以帮助我理解我做错了什么的东西。

#include <list>
#include <iostream>

using namespace std;

template <typename T>
list<T> interleaveLists(const list<T>& l, const list<T>& m)
{
list<T> interleavedList;
list<T>::const_iterator iter1;
list<T>::const_iterator iter2;
list<T>::const_iterator iter3;
list<T>::const_iterator iter4;

iter1 = l.begin();
iter2 = l.end();
iter3 = m.begin();
iter4 = m.end();

while (iter1 != iter2 || iter3 !=iter4)
{
interleavedList.push_back(*iter1);
interleavedList.push_back(*iter3);
iter1++;
iter3++;

if (iter1 == iter2)
{
interleavedList.push_back(*iter3);
}

if (iter3 == iter4)
{
interleavedList.push_back(*iter1);
}
} // end while
return interleavedList;
} //end interleaveLists

//******************************************************************

int main()
{
list<int> list1;
list<int> list2;
list<int> list3;
list<int> newList;

// Create list1 = {40, -5, 66, -7, 8}
list1.push_back(40);
list1.push_back(-5);
list1.push_back(66);
list1.push_back(-7);
list1.push_back(8);

// Create list2 = {22, 3, -4}
list2.push_back(22);
list2.push_back(3);
list2.push_back(-4);

newList = interleaveLists(list1, list2);
while (!newList.empty())
{
cout << newList.front() << " ";
newList.pop_front();
}
cout << endl;

newList = interleaveLists(list3, list2);
while (!newList.empty())
{
cout << newList.front() << " ";
newList.pop_front();
}
cout << endl;
} // end main

最佳答案

您可以超出范围循环。如果 iter1==iter2,但 iter3!=iter4,下面的代码将 push_back(*iter1),虽然 iter1 已经是 l.end()。

while (iter1 != iter2 || iter3 !=iter4)
{
interleavedList.push_back(*iter1);
interleavedList.push_back(*iter3);

关于C++ const_iterator 不可取消引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666012/

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