![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Привык писать на С++ под винду, а тут не знаю как...
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Anton Vatchenko, точно также:
#include <vector> std::vector #include <map> std::map #include <list> std::list #include <set> std::set да и malloc/calloc/realloc/free тоже имеются Это сообщение отредактировал(а) bsa - 4.12.2007, 15:31 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
в си есть realloc и указатели))
|
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Нет, а по принципу vector и прочие?
|
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Так вот поэтому я и спрашиваю про Си, но работал с vector, а 90% ответов тут дали люди невнимательные... Мне нужны динамические массивы, посему маллок не подойдет, вектор - в с++.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Anton Vatchenko, malloc - это выделение памяти. именно он тебе и нужен (ну может с calloc проще будет, хотя это по сути одно и тоже).
я только вот не понял, а причем тут Unix? Это сообщение отредактировал(а) bsa - 4.12.2007, 16:20 |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Маллок умеет динамические массивы делать (то есть, где все время меняется количество элементов)? Это что-то новое... То есть он сможет мне помочь работать с массивами то из 10, то из 1000 элементов, где на каждом шаге (раз 20 в секунду) это самое количество элементов меняется...
Это сообщение отредактировал(а) Anton Vatchenko - 4.12.2007, 16:24 |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
перечислили доступный инструментарий уже: |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Anton Vatchenko, ты вообще знаешь, как vector работает?
Когда делаешь resize(10): Если capacity()>=10, то память не выделяется, в противном случае выделяется с помощью realloc 2*max(capacity(), 10) * sizeof(value_type), capacity принимает значение количества выделенных элементов. Но пользователю предоставляется только new_size... |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Но это достаточно страшный метод, который я никогда не использую... Ведь не зря в С++ есть вектора, хэшмапы и прочее... Вот я хотел бы и тут найти...
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
так используй realloc
Добавлено через 5 минут и 11 секунд когда realloc делаешь содержимое массива сохраняется, да-же если указатель изменился... |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Anton Vatchenko, извиняй. На C++ уже сделали оптимизацию, а на Си, возможно, нет. Хотя, может быть, что те же malloc и realloc немного оптимизированы. Но не так, как vector.
С другой стороны, если тебе нужно часто менять количество элементов, но случайный доступ к ним не нужен, то имеет смысл использовать дву/односвязные списки - там не придется каждый раз выделять кучу памяти под все объекты. |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
два разных языка программирования - с и с++, почему если есть в с++, то должно быть в с? нету ничего и не может быть, так как нет средств в с для создания таких вещей как vector. |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Насколько я понимаю, реаллок заново выделяет память и переносит старые данные на новое место. Мне нужен принцип быстрой работы как в Векторе - я добавляю один элемент, но в памяти добавляется небольшой кусок, и связывается по ссылкам с соседними, а не копируется тупо весь массив...
То есть цикл: Array array; int i; for(i = 0; i < 1000; i++) { if(needInsert(i)) arrayAdd(&array, i); } работал быстро... |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Ты видимо даже не знаешь, как работает vector и чем он отличается от list. Так вот, вектор в простейшем случае работает, как realloc (а точнее, так, как я описал на той странице), а вот list (двусвязный список) работает так, как ты написал. Кстати, к элементам list ты не можешь обращаться по индексу. Только через "итераторы" (указатели). Это сообщение отредактировал(а) bsa - 4.12.2007, 17:02 |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
>> нету ничего и не может быть, так как нет средств в с для создания таких вещей как vector
Что значит не может быть? В Си никто не смог сделать компонент типа Вектор? Я на си писал такое, но хотел бы получить не корявый вариант... То есть функции типа: listAdd(List *list, void *data); listRemove(List *list, int position); listInsert(List *list, void *data, int position); И пусть меня никто не смешит, что это невозможно сделать, так как мы это делали еще в школе на информатике. Делали односторонние, двухсторонние списки, очереди, стеки, и т. д. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
vector != list Нельзя на Си сделать такой компонент. Просто потому, что в Си нет шаблонов! А для каждого из стандартных типов будет недостаточно. |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Да я ж не про шаблоны спрашивал, а про обычные динамические массивы, списки...
Это сообщение отредактировал(а) Anton Vatchenko - 4.12.2007, 17:32 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Anton Vatchenko, хорошо. тогда скажи, как ты представляешь стандарный список, который будет работать со struct mystruct?
|
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Этот список должен работать с ней, как с void*, как это часто и делается, если нет шаблонов...
|
|||
|
||||
orthrus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 400 Регистрация: 30.10.2007 Где: г. Усть-Илимск(Ир кутская обл.) Репутация: нет Всего: 16 |
Может быть тебе подойдет функционал библиотеки glib? Списки, очереди, динамическии массивы (garray что то вроде вектора) и еще куча всякой всячины там есть.
-------------------- У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой ![]() |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
glib очень массивная библиотека...
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
это не аргумент от неё отказываться. а ядро вообще весит до фига... давайте без него, да? ![]() |
|||
|
||||
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
На С++ есть тэмплейтовские вектора и т.д. на С нужно писать все самому, думаю на С++ они так и имплементированы посредством маллока и реаллока.
А что за потребность писать на С, а не на С++ - работаешь с проектом уже написанный на С ? |
|||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: нет Всего: 3 |
А вот такое подойдёт- sglib ? Прямо почти что темплейты на си ![]() |
|||
|
||||
Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Отвечу на все вопросы... Работаю на Си, потому как на линуксе на слабом компьютере, люблю Си больше С++... И поэтому подключение любых дополнительных библиотек приведет к "ужасным" последствиям.. Я думал, что есть функции типа printf и прочих, которые уже содержатся в ядре, если не ошибаюсь...
Может тогда кто-то подскажет где найти один си-файл, чтобы подключить к своему проекту, где хорошо реализован динамический массив... Достаточны функции типа add, remove, insert, next, prev, first... |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |