#include #include #include #include #include using namespace std; vector< double > intersection2_f( vector< double >& x,vector< double >& y ) { sort( x.begin(), x.end() ); sort( y.begin(), y.end() ); vector< double > res; vector< double >::iterator xx = x.begin(); vector< double >::iterator yy = y.begin(); for( ; yy != y.end(); yy++ ) { for(; *xx < *yy && xx != x.end(); xx++ ); if ( *xx == *yy ) res.push_back(*yy); } return res; } #ifdef OCTAVE #include Matrix convert( vector< double > & stl_v ) { int rows = stl_v.size(); if (rows == 0) return Matrix( 0, 0 ); Matrix oct_mx( rows, 1 ); for( int r=0; r convert( Matrix & oct_v ) { vector v; int rows = oct_v.length(); if (rows == 0) return v; for( int r=0; r x = convert( oct_x ); vector< double > y = convert( oct_y ); vector< double > res = intersection2_f( x, y ); Matrix oct_mx = convert( res ); return octave_value( oct_mx ); } #else // for testing purposes int main() { vector< double > x(4,0), y(5,0), res; x[0] = 64; x[1] = 8; x[2] = 12; x[3] = 30; y[0] = 1; y[1] = 30; y[2] = 5; y[3] = 12; y[4] = 20; cout << endl; res = intersection2_f( x, y ); for( vector::iterator ii=res.begin(); ii != res.end(); ii++ ) cout << *ii << endl; } #endif