C++容器异常

C++容器错误
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std ;

typedef vector<int> VI ;
//typedef vector<VI> VVI ;

void input(VI& data)
{
ifstream in("abc.txt") ;

for(string s ; getline(in,s) ; )
{
int tmp ; 

for(istringstream sin(s) ; sin>>tmp ; )
{
data.push_back(tmp) ;
}
}
}

void print(const VI& result)
{
for(unsigned int i = 0 ; i < result.size() ; i++)
{
cout<< result[i] << " " ;
}

cout<<endl ;
}

int square(int tmp)
{
int result = 0 ; 
int t ;

while(tmp)
{
t = tmp%10 ; 
result += t*t ;
tmp /= 10 ;
}

return result ;
}

void psort(VI& data)
{
VI temp(data) ;

for(unsigned int i = 0 ; i < data.size() ; i++)
{
temp[i] = square(temp[i]) ;
}

int len = temp.size() ;

sort(temp.begin() , temp.begin()+len) ;

print(temp) ;
}

void output(const VI& data)
{
int len = data.size() ;

if(data.size())
{
sort(data.begin() , data.begin()+len) ;
print(data) ;
}
else
{
cout<<"It is empty!!!"<<endl;
}
}

int main()
{
VI data ;

input(data) ;

psort(data) ;

output(data) ;

return 0 ;

}


错误信息:

d:\vs8\vc\include\algorithm(2982) : error C3892: “_Next1”: 不能给常量赋值
1>d:\vs8\vc\include\algorithm(2983) : error C3892: “_Next1”: 不能给常量赋值
1>生成日志保存在“file://c:\Users\xswby\Documents\Visual Studio 2008\Projects\chart5_5\chart5_5\Debug\BuildLog.htm”
1>chart5_5 - 3 个错误,0 个警告
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========


------解决方案--------------------
C/C++ code

#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std ;

typedef vector<int> VI ;
//typedef vector<VI> VVI ;

void input(VI& data)
{
    ifstream in("abc.txt") ;

    for(string s ; getline(in,s) ; )
    {
        int tmp ;  

        for(istringstream sin(s) ; sin>>tmp ; )
        {
            data.push_back(tmp) ;
        }
    }
}

void print(const VI& result)
{
    for(unsigned int i = 0 ; i < result.size() ; i++)
    {
        cout<< result[i] << " " ;
    }

    cout<<endl ;
}

int square(int tmp)
{
    int result = 0 ;  
    int t ;

    while(tmp)
    {
        t = tmp%10 ;  
        result += t*t ;
        tmp /= 10 ;
    }

    return result ;
}

void psort(VI& data)
{
    VI temp(data) ;

    for(unsigned int i = 0 ; i < data.size() ; i++)
    {
        temp[i] = square(temp[i]) ;
    }

    int len = temp.size() ;

    sort(temp.begin() , temp.begin()+len) ;

    print(temp) ;
}
//传进来的是const, 还怎么排序 ?
//void output(const VI& data)
void output(VI& data)
{
    int len = data.size() ;

    if(data.size())
    {
        sort(data.begin() , data.begin()+len) ;
        print(data) ;
    }
    else
    {
        cout<<"It is empty!!!"<<endl;
    }
}

int main()
{
    VI data ;

    input(data) ;

    psort(data) ;

    output(data) ;

    return 0 ;

}

------解决方案--------------------
C/C++ code

    void output(/*const*/ VI& data)
    {
        int len = data.size() ;

        if(data.size())
        {
            sort(data.begin() , data.begin()+len) ;
            print(data) ;
        }
        else
        {
            cout<<"It is empty!!!"<<endl;
        }
    }