首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ const_iterator不可以取消吗?

C++ const_iterator不可以取消吗?
EN

Stack Overflow用户
提问于 2013-10-29 18:11:27
回答 2查看 225关注 0票数 1

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

我已经做了相当多的研究,但没有发现任何能帮助我理解我做错了什么的东西。

代码语言:javascript
复制
#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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 18:18:41

你可以跳出射程。如果是iter1==iter2,但是iter3!=iter4,下面的代码将是push_back(* iter1 ),尽管iter1已经是l.end()。

代码语言:javascript
复制
while (iter1 != iter2 || iter3 !=iter4)
{
    interleavedList.push_back(*iter1);
    interleavedList.push_back(*iter3);
票数 2
EN

Stack Overflow用户

发布于 2013-10-29 18:21:33

您试图取消引用等于end()的迭代器的问题。

代码语言:javascript
复制
  while (iter1 != iter2 || iter3 !=iter4)
  {
    interleavedList.push_back(*iter1);  // here is invalid code
    interleavedList.push_back(*iter3);  // here is invalid code
    iter1++; // here is invalid code
    iter3++; // here is invalid code
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19666012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档