在这些条件下,
最佳方法意味着x86架构上最快。
答案 0 :(得分:1)
如果你在谈论两个分开运行的程序,你可以使用A管道对象 在Windows中,您将使用`CreateNamedPipe()' http://msdn.microsoft.com/en-us/library/aa365150%28VS.85%29.aspx
答案 1 :(得分:1)
您可以将'other'函数赋予第一个函数以回调:
#include <algorithm>
#include <iostream>
template<typename It, typename It2, typename F1, typename F2>
void combine( It from, It to, It2 out, F1 f1, F2 f2 ) {
for( int* p = from; p != to; ++p ) {
*(out++) = f2( f1( *p ) );
}
}
int increment( int i ){ return ++i; }
int twice( int i ){ return i+i; }
int main() {
int ints[]={1,2,3,4};
int result[4];
combine( ints, ints+4, result, increment, twice );
std::copy( result, result+4, std::ostream_iterator<int>( std::cout, "; " ) );
}
实际上,可以通过将函数转换为“第一类”对象来扩展此机制。 STL具有实现此目的的构造:如果将自由函数包装在ptr_fun
对象中,则可以构造更好的组合函数。在SGI的STL实现中,compose
功能可用。
#include <functional>
template<typename F1, typename F2>
struct Combined : public std::unary_function
< typename F1::argument_type
, typename F2::result_type > {
typedef typename F2::result_type result_type;
typedef typename F1::argument_type argument_type;
Combined( F1 f1, F2 f2 ): f1_( f1 ), f2_( f2 ) {}
result_type operator()( argument_type arg ) const {
return f2_( f1_( arg ) );
}
private:
F1 f1_;
F2 f2_;
};
template<typename F1, typename F2>
Combined<F1,F2> combined( F1 f1, F2 f2 ) { return Combined<F1,F2>(f1,f2); }
然后使用此功能更加通用地组合功能:
#include <iostream>
#include <iterator>
#include <algorithm>
int increment(int i){ return ++i; }
int twice(int i) { return 2*i; }
int main() {
using namespace std;
int values[]={1,2,3,4};
transform( values, values+4, ostream_iterator<int>( cout, "; " ),
combined( ptr_fun( increment ), ptr_fun( twice ) )
);
transform( values, values+4, ostream_iterator<int>( cout, "; " ),
combined( ptr_fun( increment ),
combined( ptr_fun( increment ), ptr_fun( twice ) ) )
);
}
答案 2 :(得分:0)
如果你的意思是输出,那么只需将数组直接传递给下一个函数,并使用一个整数表示有多少元素。它将传递第一个元素的地址(32位系统上的4个字节或64位系统上的8个字节),然后以4个字节传递大小。
如果幸运的话,编译器甚至会通过寄存器传递这些参数。