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 个 ==========
------解决方案--------------------
#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; } }