Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

edycja i usuwanie elementów vectora

Ostatnio zmodyfikowano 2016-04-10 13:26
Autor Wiadomość
mkami
Temat założony przez niniejszego użytkownika
edycja i usuwanie elementów vectora
» 2016-04-10 11:37:52
Witam! Mam problem z edycją oraz usuwaniem konkretnego elementu vectora. Mianowicie stworzyłem bazę danych opartą na klasie i vectorze w którym zapisuje kolejne obiekty, w programie mam funckje która znajduje dane obiekty wg wybranego kryterium i je wyświetla. Następnie mogę wybrać który element mam usunąc, bądz edytować . Problem występuje po wybraniu konkretnego elementu - wyskakuje mi wtedy Debug Assertion Failed "vector subscript out of range"

Mam też problem z pierwszym elementem tego vectora, do którego jakby nie mam dostępu i zawsze jest pusty..., trochę poczytałem i myślałem że jest to spowodowane korzystaniem z funkcji push_back która dodaje element na końcu vectora i niby na "czystym, niewypełnionym vectorze" tym końcem jest jego drugi element.

Z góry dzieki za pomoc!
P-147145
jankowalski25
» 2016-04-10 12:01:52
wyskakuje mi wtedy "vector subscript out of range"
Frazy, które należy wpisać w wyszukiwarkę google:
Pierwszy link: [C++]Vector subscript out of range
Czyli "indeks wektora poza zasięgiem". Sprawdź, do jakich indeksów się odwołujesz i w którym miejscu wychodzisz poza zakres.
P-147147
mkami
Temat założony przez niniejszego użytkownika
odp
» 2016-04-10 12:19:06
Problem rozwiązany , indeks w vectorze nie zgadzał się z tym wyświetlanym na ekranie - przez to powstawał ten problem , W swoim programie baza[pam[nr+1]].imie = imie1; niepotrzebnie dodawałem tą jedynke do indeksu w nawiasie kwadratowym

Dzięki za pomoc!

A co powiecie o drugim problemie?
""Mam też problem z pierwszym elementem tego vectora, do którego jakby nie mam dostępu i zawsze jest pusty..., trochę poczytałem i myślałem że jest to spowodowane korzystaniem z funkcji push_back która dodaje element na końcu vectora i niby na "czystym, niewypełnionym vectorze" tym końcem jest jego drugi element. ""
P-147148
jankowalski25
Nie musisz wypełniać pola "tytuł", jeśli nie zakładasz nowego tematu
» 2016-04-10 12:22:18
Czy pamiętasz o tym, że pierwszym indeksem jest zero? W jaki sposób próbujesz odwołać się do pierwszego elementu?

Dopisano:
Jaki wynik otrzymujesz po zastosowaniu iteratorów?
P-147149
mkami
Temat założony przez niniejszego użytkownika
odp
» 2016-04-10 12:44:54
Właśnie zauważyłem że to juz przy tworzeniu nowej bazy powstaje ten problem. Tworze ją tą funkcją:

void nowa_baza(void) {
spis_osob.clear();
string imie1, nazwisko1,wiek1;
ifstream file("baza.txt", ios::in);
getline(file, imie1, ' ');
getline(file, nazwisko1, ' ');
getline(file, wiek1, ' ');
osoba *pam;
pam = new osoba(imie1, nazwisko1,wiek1);
spis_osob.push_back(*pam);
delete pam;


Może tu jest błąd, rzuć na to okiem.
P-147150
jankowalski25
» 2016-04-10 12:46:41
delete pam;
Nie usuwasz przypadkiem pierwszego elementu?

W porządku, wyłuskujesz wskaźnik w trakcie dodawania do wektora. Ale w takim razie nie prościej napisać:
spis_osob.push_back( osoba( imie1, nazwisko1, wiek1 ) );
P-147151
mkami
Temat założony przez niniejszego użytkownika
odp
» 2016-04-10 12:54:00
To znaczy ta funkcja ma za zadanie albo stworzyć nową bazę , gdy plik txt nie istnieje albo wyczyścić zawartość istniejącego pliku txt.

Chyba nie, jak usunę delete pam; z kodu programu to problem dalej występuje :/
P-147152
Monika90
» 2016-04-10 12:56:39
Twoja funkcja zawsze dodaje jeden element do wektora, gdy plik jest pusty lub nie istnieje, to doda pusty element.
P-147153
« 1 » 2
  Strona 1 z 2 Następna strona