Лямбда повышения делает это легким.
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/if.hpp>
std::for_each( v.begin(), v.end(),
if_( MyPred() )[ std::mem_fun(&MyType::myfunc) ]
);
Вы могли даже покончить с определением MyPred (), если это просто. Это - то, где лямбда действительно сияет. Например, если MyPred имел в виду, "является делимым 2":
std::for_each( v.begin(), v.end(),
if_( _1 % 2 == 0 )[ std::mem_fun( &MyType::myfunc ) ]
);
<час> Обновление: Выполнение этого с C++ 0x синтаксис лямбды также очень хорошо (продолжать предикат как по модулю 2):
std::for_each( v.begin(), v.end(),
[](MyType& mt ) mutable
{
if( mt % 2 == 0)
{
mt.myfunc();
}
} );
На первый взгляд это похоже на шаг назад от повышения:: синтаксис лямбды, однако, это лучше, потому что более сложная логика функтора тривиальна для реализации с C++ 0x синтаксиса... где что-либо очень сложное в повышении:: лямбда становится хитрой быстро. Бета 2 Microsoft Visual Studio 2010 года в настоящее время реализует эту функциональность.
Вот решение в простом и простом коде C++ без необычной функции, используйте DMA, чтобы выделить динамический массив строк и поместить данные в массив, пока Вы не находите открытое пространство. отошлите код ниже с комментариями. Я надеюсь, что это помогает.
#include<bits/stdc++.h>
using namespace std;
int main()
{
string data="hello there how are you"; // a_size=5, char count =23
//getline(cin,data);
int count=0; // initialize a count to count total number of spaces in string.
int len=data.length();
for (int i = 0; i < (int)data.length(); ++i)
{
if(data[i]==' ')
{
++count;
}
}
//declare a string array +1 greater than the size
// num of space in string.
string* str = new string[count+1];
int i, start=0;
for (int index=0; index<count+1; ++index) // index array to increment index of string array and feed data.
{ string temp="";
for ( i = start; i <len; ++i)
{
if(data[i]!=' ') //increment temp stored word till you find a space.
{
temp=temp+data[i];
}else{
start=i+1; // increment i counter to next to the space
break;
}
}str[index]=temp;
}
//print data
for (int i = 0; i < count+1; ++i)
{
cout<<str[i]<<" ";
}
return 0;
}