首页 新闻 会员 周边 捐助

这个函数有问题吗?怎么它的返回值是乱码?

0
[已关闭问题] 关闭于 2010-09-28 11:52

************************************************************************/

02 /* KNN分类器                                                               */
03 /************************************************************************/
04 vector<pair<int,string> > Preprocess::KNNclassifier(map<string,vector<pair<int,int>>> &mymap,map<int,vector<double> >&trainingsetVSM,map<int,vector<double> >&testingsetVSM,vector<string>catigorization,int N)
05 {
06     clock_t start,finish;
07     double totaltime;
08     start=clock();
09     vector<pair<int,string>>classifyResults;
10     for(map<int,vector<double> >::iterator it=testingsetVSM.begin();it!=testingsetVSM.end();it++)
11     {
12           
13         string label=KNNClassificationCell(N,(it->second),catigorization,mymap,trainingsetVSM);
14         pair<int,string> temp=make_pair(it->first,label);
//在这里面加入打印到文件的代码
ofile<<"文章标号"<<temp.first<<"归为类别"<<temp.second<<endl;
  cout<<"文章标号"<<temp.first<<"归为类别"<<temp.second<<endl;
15         classifyResults.push_back(temp);
16   
17     }
18     finish=clock();
19     totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
20     cout<<"对测试集进行KNN分类的时间为"<<totaltime<<endl;
21     return classifyResults;
22   
23   

 输入的temp结果如下:

显示是正常的,也就是说temp在push到 vector classifyResults里面之前没有乱码

我在单步调试过程中,在temp也是看到正确结果了

可是主函数中调用返回的东西却很奇怪

问题补充: 原因已经找到: The Visual C++ 8.0 compiler makes use of the flexibility that the standard provides and adds a new feature: Named Return Value Optimization (NRVO). NRVO eliminates the copy constructor and destructor of a stack-based return value. This optimizes out the redundant copy constructor and destructor calls and thus improves overall performance. It is to be noted that this could lead to different behavior between optimized and non-optimized programs (see the Optimization Side Effects section). 文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/c++/cppjs/20100531/206971.html
finallyly的主页 finallyly | 初学一级 | 园豆:100
提问于:2010-09-27 18:25
< >
分享
所有回答(1)
0

可能和选择的字符集有关,因为C++ 和 C# 不同,字符串不是强制为 UnionCode ,你这个中文字符串如果不是 UnionCode 编码,调试环境很可能无法正确识别。如果你打印出来也是乱码,那就不是字符集的问题,而是你程序哪里出问题了。

eaglet | 园豆:17139 (专家六级) | 2010-09-28 07:50
不是这个问题
支持(0) 反对(0) finallyly | 园豆:100 (初学一级) | 2010-09-28 08:47
谢谢你的回复
支持(0) 反对(0) finallyly | 园豆:100 (初学一级) | 2010-09-28 08:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册