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 个 ==========
[解决办法]
#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 ;}
[解决办法]
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; } }