具体地说,我想实现这个东西:
string s="abcdefg";
vector<int> vec;
for(iter=s.begin();......)
{
vec.push_back(*iter);
}
但是用for_each如何实现?
在网上查了很久,发现最接近的一种方法是
for_each(s.begin(),s.end(),mem_fun_ref(&vector<int>::push_back));
但是mem_fun_ref部分的成员函数必须属于string s,而不能属于vector<int> vec,请问我该怎么处理啊。。。
10 个解决方案
#1
不需要,研究一下copy。
#2
顺便再问一下各位大神哈,怎么用for_each()输出vector<int> vec里的各个元素?
#3
还是用C++2011标准的range base for吧
for (auto x : s)
{
...
}
for (auto x : s)
{
...
}
#4
哦,好像这也行。。
不过其实我的意思是push_back(*iter-'0')...先copy再修改影响效率嘛,而且我是要用逆向迭代器反向录入的。。
另外就是如果以后有for_each(a.begin(),a.end(),f)而f是b的成员函数,这怎么处理啊。。
#5
打住吧,你会在stl的functor adaptor上被折腾到不是恶心,而是蛋碎的。
然后,你就会引入boost库,然后就麻烦更加大。
然后,你就会引入boost库,然后就麻烦更加大。
#6
这一点从我在网上看的文章上已经深切的体现出来了。。。
#7
楼主的vector<int> vec;这句应该是char型的吧。我给你写了如下代码,希望对你有用。
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
void func(char &a)
{
cout<<a;
}
int main(){
char* cptr="abcdefg";
vector<char> vec;//这里是char
while(*cptr!='\0')//楼主想实现的功能在这里
{
vec.push_back(*cptr);
cptr++;
}
for_each(vec.begin(),vec.end(),func);//对于foreach的用法。
system("pause");
return 0;
}
#8
如果是 C++ 11的话,
填一个只有一个int参数的函数就可以了.
或者
std::for_each(vec.begin(), vec.end(), [](int& i){
printf("%d\n", i); //也可以对i赋值
});
填一个只有一个int参数的函数就可以了.
或者
for (auto& i : vec){
//输出i 或者 对i 赋值
}
#9
for_each(s.begin(); s.end(); [&vec](char c)
{
vec.push_back(c);
});
#10
辛苦了,不过我不是这个意思啊,我就是需要调用类成员函数,尽量避免使用全局函数和友元函数啊。。
还有我的vector<int>确实是int,push_back()自带隐式类型转换的。
关于8L9L,c++11确实强大,不过我出于某种原因暂时不能使用。。。。
#1
不需要,研究一下copy。
#2
顺便再问一下各位大神哈,怎么用for_each()输出vector<int> vec里的各个元素?
#3
还是用C++2011标准的range base for吧
for (auto x : s)
{
...
}
for (auto x : s)
{
...
}
#4
哦,好像这也行。。
不过其实我的意思是push_back(*iter-'0')...先copy再修改影响效率嘛,而且我是要用逆向迭代器反向录入的。。
另外就是如果以后有for_each(a.begin(),a.end(),f)而f是b的成员函数,这怎么处理啊。。
#5
打住吧,你会在stl的functor adaptor上被折腾到不是恶心,而是蛋碎的。
然后,你就会引入boost库,然后就麻烦更加大。
然后,你就会引入boost库,然后就麻烦更加大。
#6
这一点从我在网上看的文章上已经深切的体现出来了。。。
#7
楼主的vector<int> vec;这句应该是char型的吧。我给你写了如下代码,希望对你有用。
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
void func(char &a)
{
cout<<a;
}
int main(){
char* cptr="abcdefg";
vector<char> vec;//这里是char
while(*cptr!='\0')//楼主想实现的功能在这里
{
vec.push_back(*cptr);
cptr++;
}
for_each(vec.begin(),vec.end(),func);//对于foreach的用法。
system("pause");
return 0;
}
#8
如果是 C++ 11的话,
填一个只有一个int参数的函数就可以了.
或者
std::for_each(vec.begin(), vec.end(), [](int& i){
printf("%d\n", i); //也可以对i赋值
});
填一个只有一个int参数的函数就可以了.
或者
for (auto& i : vec){
//输出i 或者 对i 赋值
}
#9
for_each(s.begin(); s.end(); [&vec](char c)
{
vec.push_back(c);
});
#10
辛苦了,不过我不是这个意思啊,我就是需要调用类成员函数,尽量避免使用全局函数和友元函数啊。。
还有我的vector<int>确实是int,push_back()自带隐式类型转换的。
关于8L9L,c++11确实强大,不过我出于某种原因暂时不能使用。。。。