mem_fun_ref
#include <iostream>#include <vector>#include <list>#include <algorithm>using namespace std;intmain(int argc, char **argv){ vector<list<int> > v; v.push_back(list<int>()); vector<list<int> >::iterator it; for(it = v.begin(); it != v.end(); ++it) { for(int i = 0; i < 20; ++i) { (*it).insert((*it).begin(), i); } } for_each(v.begin(), v.end(), std::mem_fun_ref(&list<int>::sort)); for(it = v.begin(); it != v.end(); ++it) { for(list<int>::iterator lt; lt != (*it).end(); ++lt) { std::cout<<*lt<<std::endl; } } return 0;}
#include <iostream>#include <vector>#include <list>#include <algorithm>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ vector<list<int> > v; v.push_back(list<int>()); vector<list<int> >::iterator it; for(it = v.begin(); it != v.end(); ++it) { for(int i = 0; i < 20; ++i) { (*it).insert((*it).begin(), i); } } for_each(v.begin(), v.end(), std::mem_fun_ref(&list<int>::sort)); for(it = v.begin(); it != v.end(); ++it) { for(list<int>::iterator lt = (*it).begin(); lt != (*it).end(); ++lt) { std::cout<<*lt<<std::endl; } } return 0;}
[解决办法]
LZ.....int是数据类型 不能这么分开写的 int是main函数的返回值的类型
[解决办法]
应该不可以这么写的吧。只在一行中识别。中间隔几个空隔没有关系。但换了行了,就不可以识别了。
[解决办法]
STL 中 mem_fun 系列函数子只能识别常量成员。
[解决办法]
一直没怎么用这些东西,只能飘过了……
[解决办法]
lz的这个问题想了好长时间,我得出的结论是,可能mem_fun_ref只能用在自己定义的类里面(这个类估计还不能是模板类),不能用在stl中定义的类的函数里面。我试过很多了,vector也不行。具体的原因还不知道。
再就是lz的这个程序是你自己写的吗?
这个程序除了这个错误之外,还有一个很明显的逻辑错误,就是
for(list<int>::iterator lt; lt != (*it).end(); ++lt)
{
std::cout<<*lt<<std::endl;
}
这个里面的iterator lt没有进行初始化,所以就算你把先前的那一行代码错误解决掉了,这一个错误足以让你的程序死翘翘。
还有一点要指出来的就是,如果已经用了using namespace std,后面就不要在有的地方用std::,有的地方不用了,这样子程序让人看起来有点不舒服,因为格式不统一。
如果这程序是lz自己写的,那程序做的什么事情就不需要我来解释了,我帮lz把程序改了一下,下面这个我写的程序跑出来应该是没有问题的。
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std; //这里用了这个下面就不要再用std::,要注意格式统一
int
main(int argc, char **argv)
{
vector<list<int> > v;
v.push_back(list<int>());
vector<list<int> >::iterator it;
for(it = v.begin(); it != v.end(); ++it)
{
for(int i = 0; i < 20; ++i)
{
(*it).insert((*it).begin(),i);
}
}
for(vector<list<int> >::iterator it = v.begin(); it != v.end(); ++it)
it->sort();
/*这么写是没有办法的,其实尽量是要用for_each的*/
for(it = v.begin(); it != v.end(); ++it)
{
for(list<int>::iterator lt = (*it).begin(); lt != (*it).end(); ++lt)
{
cout << *lt << endl;
}
}
return 0;
}
如果有问题lz可以message我,因为不知道再回来找不找得到这个帖子