32
|
Програмиране / Общ форум / struct S { ... }; vector<S> .....
|
-: 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.
|
|
|
34
|
Нетехнически теми / Коментар / Welcome to Gmail
|
-: Apr 23, 2004, 02:35
|
Това е малко "данайски дар", защото дори и да изтриеш съобщение google ще си го пази но няма да ти го показва.
Правят го за да анализират получени/изпратени пощи и от там да разберат от какво се интересуваш. Знаейки последното ще знаят какви реклами да ти изпращат - такива на каквито е най-вероятно да "клъвнеш".
Всичко това не е престъпно и сигурно не би пречило на много хора но аз предпочитам да го пропусна.
|
|
|
36
|
Програмиране / Общ форум / C/C++
|
-: Apr 14, 2004, 10:23
|
Ако наистина си начинаещ по-добре не се захващай с цветовете на конзолата под C/C++. Тези езици нямат вградена поддръжка на цветове на конзола и ще трябва да учиш да ползваш библиотека от функции - напр. ncurses. Не съм сигурен че това е подходящо упражнение за начинаещ.
Ако просто искаш да си свършиш някаква работа - пиши директно на stdout, така програмите ти ще могат да участват във вериги от команди с пренасочване.
А ако много държиш да видиш нещо шаренко на екрана можеш да си генерираш .html документ и след това да стартираш броузер който да го покаже.
|
|
|
38
|
Linux секция за начинаещи / Настройка на програми / apt-get upgrade1 upgraded, 0 newly installed, 0 to
|
-: Mar 31, 2004, 02:34
|
По някаква причина имаш файл /usr/X11R6/include/X11/Xft/Xft.h и dpkg отказва да запише друг файл с това име.
Ако файла ти е инсталиран от .deb пакет (`dpkg -S Xft.h` ще ти каже кой пакет го е инсталирал) то деинсталирай въпросния друг пакет първо.
По-вероятно е да си инсталирал въпросния файл без да ползваш dpkg/apt-get - например от сорс .tar.gz файл. В такъв случай е хубаво да разбереш как точно този файл се е появил там и да го деинсталираш - както него, така и останалите файлове инсталирани заедно с него. Тогава `apt-get -f install ` трябва да свърши работа.
Ползване на --force-yes е игра с огъня и те съветвам да не го правиш. Системата ти и без това не изглежда добре, като "насилиш" apt-get съвсем ще я замажеш. Може да го позваш като последно средство преди форматиране на HDD!
|
|
|
39
|
Linux секция за начинаещи / Настройка на програми / Debian & Xfce 4
|
-: Nov 01, 2003, 12:02
|
Sorry za kirilitcata. I az predi malko se boreh sus sushtia problem. Iavno avtorite na xfce4 polzvat gdm vmesto kdm...
Instrukcii: Control Center - System Administration - Login Manager (shte ti triabva root parola) Tab "sessions", v dolnia desen ugul imash "Available types". default & failsafe sa sistemni - ne gi pipaj, ostanalite sa shell scriptove ili programi koito triabva da se izpulniat pri logon i do koito triabva da ima PATH.
Az umah xfwm4 (maj niakoj ot deb paketite go dobavi) no tova ne e korektno. Iztrij go, v poleto "new type" vyvedi razbirameo ime (Xfce4), click Add New i click OK.
Sled tova otvori konzolata:
cd /usr/bin ln - s /etc/gdm/Sessions/Xfce4 Xfce4
(Poslednoto Xfce4 e razbiraemoto ime ot po-gore)
Log off, Log-on i triabva da e OK.
Vesselin
|
|
|
|