[C++] algorytm for_each

0

Witam,
mam nietypowe pytanie.. otoz
stworzylem przykladowa klase

class A{
     int x;
public:
     A() : x(0){}
     A(const A& rv) : x(rv.x){}
     void setX {x=1;}

};

nastepnie dodaje obiekty typu A do wektora

int test=5;
A tab[test] = {A(),A(),A(),A(),A()};

vector<A> wektor;
for(int i=0; i<test; i++)
	wektor.push_back(tab[i]);

i teraz przy pomocy FOR_EACH() chcialbym wywolac dla kazdego z obiektow metode setX(). Wiem, ze to troche bezsensowne moze sie wydawac, ale jak to zastosowac?
Czytalem aby skorzystac z <functional> i tam zastosowac mem_fun_ref, totez tak czynie:

for_each(wektor.begin(), wektor.end(), mem_fun_ref(&A::setX));

ale niestety program sie nie kompliluje..

jak poprawnie to czynic? zalezy mi na uzyciu tego algorytmu for_each(), ewentualnie aby for_each, jako 3 parametr dostawal funckje, ktora uruchamia setX(), ale nie wiem jakby to mialo wygladac. :/

Prosze o pomoc;)

0

A nie prościej napisać zwyczajny funktor i w nim przeciążyć nawiasy "()" ? Ja tak robię przynajmniej.

0

Czy moglbys mi podac przyklad odnosnie mojego 'programu' ?
jestem pcozatkujacy i troche ciezko mi to sobie wyobrazic..

dziekuje z gory

0

Jeżeli jesteś początkujący to najpierw opanuj cały OOP w C++ w tym także przeciążanie operatorów. Najpierw trzeba nauczyć się chodzić zanim zacznie się biegać.
Przyznam się szczerze że nie wiem czemu w Twoim konretnym kodzie jest błąd, ja nigdy tak nie pisałem, może ktoś mądrzejszy ode mnie Ci wytłumaczy.

EDIT
Poza tym sądzę że taki problem jest zbyt prosty żeby rozwiązywać go algorytmami STL.

0

tak wiem co to jest przeciazanie operatorow..

problem jest prosty bo inaczej rozwiazalbym go.. gdyby nie to ze musze "na sile" wepchnac w kod algorytm z STL.. w tym caly problem ;)

0

Jeśli masz kompilator mający już jakieś wsparcie dla c++0x to możesz wykorzystac wyrażenia lambda:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
class A{
     int x;
public:
  A() : x(0){}
  A(const A& rv) : x(rv.x){}
  void setX() {x=1;}
  int getX()const {return x;}

};
int main(int argc, char *argv[])
{
  vector<A> vec(10);

  for_each(vec.begin(), vec.end(),[](A &a){a.setX();});
  for_each(vec.begin(), vec.end(),[](const A& a){ cout<<a.getX()<<"\t";} );
  cout<<endl;

  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1