c++ - Implementing the [B,C]=f(A) syntax (function f acting on an array with two or more output arrays) -


i have question extension of other 2 questions have posted:

implementing b=f(a), b , arrays , b defined

and

implementing b=f(a) syntax move assignment

suppose have array a. want create function f acts on a , returns 2 other arrays b , c, enabling following matlab-like syntax

[b,c]=f(a); 

is possible in c++?

solution following leemes' answer

#include <tuple> using std::tie;  std::tuple<typeofb,typeofc> f(const matrix<t1>&a,const matrix<t2>&a) {      // instruction declaring , defining b_temp , c_temp      return std::make_tuple(b_temp,c_temp); }  int main( int argc, char** argv)  {      // instruction declaring a, b , c      tie(b,c)=f(a);      // stuff      return 0;   } 

everything works when changing std::tuple , make_tuple std::pair , std::make_pair particular case (only 2 outputs).

in general, if want return multiple values, have little work-around, since c++ doesn't allow out of box.

the first option return std::pair containing both values. can use std::tie in return statement if have c++11 available, this:

std::tie(b, c) = f(a); 

(note: c++11 has std::tuple more 2 values.)

or can pass 2 target variables reference, function call becomes (works without c++11):

f(a, b, c); 

to make function call more "verbose" (some people don't can't tell f changes b , c looking @ single line of code) can use pointers instead of references. function call this:

f(a, &b, &c); 

another option use simple "container" multiple return values. useful in particular if simple pair or tuple don't give values particular meaning. best option use consistently in code calls f (don't use separate arrays b , c). use if fits nicely rest of code design.

struct twoarrays {     int b[100];     int c[100]; };  twoarrays result = f(a); 

Comments

Popular posts from this blog

Perl - how to grep a block of text from a file -

delphi - How to remove all the grips on a coolbar if I have several coolbands? -

javascript - Animating array of divs; only the final element is modified -