« Отговор #2 -: Apr 30, 2004, 13:06 »
>..mesto masiv imam vector ! moje li ?
Може. При това е по-добре да свикнеш да ползваш вектори или списъци (std::list) отколкото масиви.
>std::vector<neshto> *v= new vector<neshto>(10);
това е вярно но непрактично. Като създаваш вектора така трябва да помниш да го delete-неш. Например savel е забравил да изтрие вектора и ако не беше main а друга функция щеше да си има хубае memory leak. Векторите не са големи структури (всъщност са с размер на 2 указателя и едно цяло число) и е по-добре да се създават като обикновени локални променливи - така те ще се саморазрушат когато не са нужни:
std::vector<neshto>v (10);
това ти създава вектор с 10 елемента които са инициализирани с конструктора по подразбиране. В случая твоята структура няма такъв конструктор така че всичките 10 елемента са неинициализирани. Това (10) ти спестява 10 пъти push_back().
>i ako moje kak se obrashtam kam elementite
Ако си дефинирал:
std::vector<neshto>v (10)
пишеш
v[0].element1 = 3;
v.element2 = 5;
или същото но ще прави проверка дали не си извън вектора:
v.at(0).element1 = 3;
v.at(i).element2 = 5;
--
Ако си дефинирал:
std::vector<neshto *>v (10)
пишеш
v[0]->element1 = 3;
v->element2 = 5;
или същото но ще прави проверка дали не си извън вектора:
v.at(0)->element1 = 3;
v.at(i)->element2 = 5;
--
Ако си дефинирал:
std::vector<neshto> *v = new vector<neshto>(10);
пишеш
(*v)[0].element1 = 3;
(*v).element2 = 5;
или същото но ще прави проверка дали не си извън вектора:
v->at(0).element1 = 3;
v->at(i).element2 = 5;
--
Ако си дефинирал:
std::vector<neshto *> *v = new vector<neshto *>(10);
пишеш
(*v)[0]->element1 = 3;
(*v)->element2 = 5;
или същото но ще прави проверка дали не си извън вектора:
v->at(0)->element1 = 3;
v->at(i)->element2 = 5;
>i pri vektor poprincip imame vector.push_back() etc.
Не е задължително - можеш с конструктора да си укажеш колко е голям вектора и след това просто да го ползваш без push_back(), както е в примерите по-горе.
>no ako imam elementi e iasno che nemoga dan apisha v.push_back()
Грешно. Ти можеж да си имаш елементи и с push_back() да си добавиш още към края. Затова векторите са по-добри от масивите :-)
> triia da mu okaja za element1 ili element2 da pusne .. ta kak stava tova ?!
Този въпрос нещо не го схванах.
> izobshto kak sedqt neshtata ako vektora e ot tip struktura
Нямаш вектор от тип структура, имаш вектор с елементи от тип структура. Надявам се че схващаш разликата.
И още един коментар по повод постинга на savel - почти винаги когато имаш vector<neshto *> е по-добре да ползваш list<neshto> - иначе лесно се забравя че освен да изтриеш елементи от вектора (v.erase()) трябва да изтриеш и самата структура (delete v) - това е и втория memory leak в кода на savel.