VisualStudioC++列表迭代器不能分解

VisualStudioC++列表迭代器不能分解,c++,list,stl,iterator,C++,List,Stl,Iterator,我一直在VisualStudio上看到一个错误,它说列表迭代器不可递减:第256行 我的程序在Linux上运行良好,但Visual Studio编译器会抛出此错误 不管怎样,你知道我的问题是什么吗 #include <iostream> #include <fstream> #include <sstream> #include <list> using namespace std; int main(){ /** create th

我一直在VisualStudio上看到一个错误,它说列表迭代器不可递减:第256行

我的程序在Linux上运行良好,但Visual Studio编译器会抛出此错误

不管怎样,你知道我的问题是什么吗

#include <iostream>
#include <fstream>
#include <sstream>
#include <list>

using namespace std;

int main(){

    /** create the list **/
    list<int> l;

    /** create input stream to read file **/
 ifstream inputstream("numbers.txt");

 /** read the numbers and add them to list **/
 if( inputstream.is_open() ){

  string line;
  istringstream instream;
  while( getline(inputstream, line) ){
      instream.clear();
      instream.str(line);

      /** get he five int's **/
      int one, two, three, four, five;
      instream >> one >> two >> three >> four >> five;

      /** add them to the list **/
      l.push_back(one);
      l.push_back(two);
      l.push_back(three);
      l.push_back(four);
      l.push_back(five);
  }//end while loop

 }//end if

 /** close the stream **/
 inputstream.close();

 /** display the list **/
 cout << "List Read:" << endl;
 list<int>::iterator i;
 for( i=l.begin(); i != l.end(); ++i){
     cout << *i << " ";
 }
 cout << endl << endl;

 /** now sort the list **/
 l.sort();

 /** display the list **/
 cout << "Sorted List (head to tail):" << endl;
 for( i=l.begin(); i != l.end(); ++i){
     cout << *i << " ";
 }
 cout << endl;

 list<int> lReversed;
 for(i=l.begin(); i != l.end(); ++i){
     lReversed.push_front(*i);
 }
 cout << "Sorted List (tail to head):" << endl;
 for(i=lReversed.begin(); i!=lReversed.end(); ++i){
     cout << *i << " ";
 }
 cout << endl << endl;

 /** remove first biggest element and display **/
 l.pop_back();
 cout << "List after removing first biggest element:" << endl;
 cout << "Sorted List (head to tail):" << endl;
 for( i=l.begin(); i != l.end(); ++i){
     cout << *i << " ";
 }
 cout << endl;
 cout << "Sorted List (tail to head):" << endl;
    lReversed.pop_front();
    for(i=lReversed.begin(); i!=lReversed.end(); ++i){
     cout << *i << " ";
 }
 cout << endl << endl;

    /** remove second biggest element and display **/
 l.pop_back();
 cout << "List after removing second biggest element:" << endl;
 cout << "Sorted List (head to tail):" << endl;
 for( i=l.begin(); i != l.end(); ++i){
     cout << *i << " ";
 }
    cout << endl;

    lReversed.pop_front();
 cout << "Sorted List (tail to head):" << endl;
 for(i=lReversed.begin(); i!=lReversed.end(); ++i){
     cout << *i << " ";
 }
 cout << endl << endl;

 /** remove third biggest element and display **/
 l.pop_back();
 cout << "List after removing third biggest element:" << endl;
 cout << "Sorted List (head to tail):" << endl;
 for( i=l.begin(); i != l.end(); ++i){
     cout << *i << " ";
 }
    cout << endl;
 cout << "Sorted List (tail to head):" << endl;
 lReversed.pop_front();
 for(i=lReversed.begin(); i!=lReversed.end(); ++i){
     cout << *i << " ";
 }
 cout << endl << endl;

 /** create frequency table **/
 const int biggest = 1000;

 //create array size of biggest element
 int arr[biggest];
 //set everything to zero
 for(int j=0; j<biggest+1; j++){
     arr[j] = 0;
 }

 //now update number of occurences
 for( i=l.begin(); i != l.end(); i++){
     arr[*i]++;
 }

 //now print the frequency table. only print where occurences greater than zero
 cout << "Final list frequency table: " << endl;
 for(int j=0; j<biggest+1; j++){
     if( arr[j] > 0 ){
         cout << j << ": " << arr[j] << " occurences" << endl;
     }
 }




    return 0;
}//end main

您正在写入超出arr数组边界的内容,在VS2008中使用调试配置编译后运行它时会导致堆栈损坏,甚至会告诉您哪些变量出错

问题在于您试图写入数组的长度,而不是长度-1。你不仅要尝试写越界,还要在以后阅读。第122、133和134行


没有得到编译器错误或警告,也没有调试断言告诉我在运行程序时尝试在任何地方递减非递减迭代器。您看到的错误可能只是损坏堆栈的副作用,但我只是猜测一下。

第256行?该文件只有137行…在请求帮助之前,至少尝试删除这100行中不相关的内容如何?@Justin-我想你是指这个功能我喜欢你使用Visual Studio提供的一个有用的调试工具,并用它来证明Windows很烂。你会被误导到什么程度?嗯,这个IDE帮助我找到我的代码中包含未定义行为的地方,该死的,让我有未定义的行为吧!我敢打赌是Visual Studio 6。那个编译器根本不支持STL。也没有container.clear方法。