C++-练习c++中的流时遇到的问题
看完c++ primer 第八章后 自己做了个练习,练习的目的是,从文件中读入 string,然后对这些string 重新排序,最后再输入另外的一个文件,程序如下:
bool isSort( const std::string &a, const std::string &b )
{
//return a.length() >= b.length();
return (a.size()) > (b.size());
}
int main( int argc,char **argv )
{
if ( argc < 2 )
{
printf("Input err please enter fileNamen");
return -1;
}
const std::string ifile(argv[1]);
std::ifstream input;
input.open(ifile.c_str());
if ( !input )
{
printf("Input file maybe err please check file name :%sn",ifile.c_str());
return -1;
}
std::string lineString;
std::stringstream ss2;
std::vector< std::string > stringVec;
while ( std::getline(input,lineString) )
{
std::stringstream ss(lineString);
std::string temp;
while ( ss >> temp )
{
stringVec.push_back(temp);
}
}
//stringVec[0].size()>= stringVec[1].size();
std::stable_sort(stringVec.begin(),stringVec.end(),isSort);
std::ofstream ofile("2.txt");
if (!ofile)
{
printf("Out put file errn");
return -1;
}
std::vector< std::string >::iterator iterVec = stringVec.begin();
for (;iterVec!=stringVec.end();iterVec++)
ofile << *iterVec<<" ";
ofile<<std::endl;
return 1;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
stable_sort 这个函数是稳定排序,即两个操作数要是相等的话,不调换位置。
但是你写isSort函数的时候,如果加上等号的话,意思就变成了“如果两个操作数相等也要调换位置”,这从逻辑上就违反了稳定排序的意图。你可以试验一下sort函数会怎样。
至于最直接的证据,还得看stable_sort函数的内部实现。但是依据上面的分析,已经可以肯定到7 8分的程度了。