Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Jak usunąć określony element z wektora?

#1
Jak usunąć określony element z wektora?
Posiadam taki wektor:

Kod:
std::vector<Animation> animations;

Bo ogólnie wiem, że trzeba użyć funkcji erase i posłużyć się iteratorem.

Kod:
std::vector<Animation>::iterator it

Bo mam do posiadam dwie metody, dodającą na koniec wektora element i właśnie tą którą chcę napisać usuwającą określony element. Ale nie wiem jak wyszukać dany element.

Kod:
void AnimationManager::addAnimation(Animation anim)
{
    
    animations.push_back(anim);
    std::cout << "Dzialam";
};

void AnimationManager::removeAnimation(Animation anim)
{
    
    std::vector<Animation>::iterator it;
    
//blabla
    
};
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: Jak usunąć określony element z wektora?
Wywołaniem metody erase. Do znalezienia elementu możesz posłużyć się funkcją find, ale klasa Animation musi mieć przeładowany operator ==.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: Jak usunąć określony element z wektora?
(31.05.2015, 11:31)Szachista napisał(a): Wywołaniem metody erase. Do znalezienia elementu możesz posłużyć się funkcją find, ale klasa Animation musi mieć przeładowany operator ==.


Co miałeś na myśli mówiąc 'przeładowany operator =='.

PS: Więc mogę po prostu tak?

Kod:
void AnimationManager::removeAnimation(Animation anim)
{
    
    std::vector<Animation>::iterator it;
    it = find(animations.begin(), animations.end(), anim);
    animations.erase(it);
    
}


Ogólnie chyba nie mam tego o czym pisałeś.

Bo mam taki błąd:

binary'==' no operator found which takes a left-hand operand of type 'Animation' (or there is no acceptable conversion) - mógłbyś bardziej wyjaśnić o co się rozchodziWesoły?


Bo ogólnie jak przeładować operator wiem, ale nie wiem jak to zrobić, tzn. co niby ma zwracać i jakiego być typu?

Kod:
typ_zwracany operator@ (argumenty)
{
// operacje
}

Czy może mam dodać po prostu nowe pole w klasie Animation i wtedy zapisać tak:

Kod:
int operator==(const Animation &q) { return finder == q.finder; }





AtEDIT

Więc mogę tak??:

1.Dodałem pole 'finder' w klasie 'Animation'.

2.Przeładowałem operator w ten sposób:
Kod:
int operator==(const Animation &q) { return finder == q.finder; }

3.Stworzyłem funkcje:

Kod:
void Animation::fn(int z)
{
    finder = z;
};
void Animation::display_fn()
{
    std::cout << this->finder;
};

4.Zmieniłem funkcje od dodawania do wektora na koniec i usuwania konkretnego elementu z niego.

Kod:
void AnimationManager::addAnimation(Animation anim)
{
    animations.push_back(anim);
    std::cout << "Dzialam";
    anim.display_fn();
    std::cout << "\n";
}; // lub samo `add`, kto co lubi

void AnimationManager::removeAnimation(Animation anim)
{
    
    std::vector<Animation>::iterator it;
    it = find(animations.begin(), animations.end(), anim);
    animations.erase(it);
    std::cout << "\nUsunalem";
    anim.display_fn();
    std::cout << std::endl;
}; // lub samo `add`, kto co lubi



Bo jak sprawdzałem na tym kodzie to działało: http://wklej.org/id/1726155/
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: Jak usunąć określony element z wektora?
Wygląda, że działa, choć kod nieco wygląda na mało przemyślany. Tak gwoli ścisłości: funkcja operatorowa operator == powinna zwracać wartość typu bool.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Jak usunąć określony element z wektora?)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  vector struktury jak dodac element? Mordrak 2 12504 02.03.2015, 19:28
Ostatni post: Mordrak
  [C++] wskaźniki, odwołanie się wskaźnikiem na element wektoru, w obiekcie pod wskaźnikiem jurek2 6 7257 27.11.2014, 20:00
Ostatni post: jurek2
  [JS]Event po kliknięciu poza element. michal16202 2 3848 31.07.2014, 18:19
Ostatni post: michal16202

Skocz do: