Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

Массивы в Си   Найти похожие ветки 

 
VEG   (2003-06-29 12:04) [0]

В Delphi можно было изменять размер массива и после инициализации:
m: array of integer;
i: integer;
for i:=0 to 100 do
begin
SetLength(m, i+1);
m[i]:=i;
end;
Однако в Си такой возможности я не нашел:
int i = 0;
int* m = new int[i+1];
for (i = 0; i<100; i++)
{
//???
m[i]=i;
}
Может я все-таки плохо искал, или каждый раз обязательно нужно удалять массив ф-ией delete, предварительно скопировав его содержимое в другой массив, больший на единицу, а потом наоборот???


 
[NIKEL]   (2003-06-29 12:57) [1]

почитай про стандартные функции malloc и realloc


 
Тих   (2003-06-29 13:03) [2]

А лучше не используй malloc и realloc, а подключи stl-евский vector.


 
VEG   (2003-06-29 17:15) [3]

Спасибо! Нашел документации!


 
VEG   (2003-06-29 19:26) [4]

Возникли трудности. Имеется такая структура:
struct {
char Name[32];
char Comm[32];
struct {
enum ibs {i, b, s};
char Name[32];
ibs Type;
union {
int i;
bool b;
char s[64];
} Value; // union Value
} Values[]; // struct Values[]
} Groups[]; // struct Vroups[]

Как видите, в самой структуре есть динамический массив Values[]. Структура Groups[] тоже является динамическим массивом. Изменять ее размер весьма неудобно функцией realloc, т.к. размер внутреннего массива меняется, т. е. приходится все размеры пересчитывать вручную, а это очень много кода. Неужели в Си нет аналога дельфийского SetLength???


 
Тих   (2003-06-29 21:19) [5]

Это хакерский код? ;-) А отчего бы сперва по-человечески не объявить typedefы, навроде

typedef enum ibs {
i, b, s
};

и т.п, а потом уж из "кирпичей" структуры посложнее не строить?


 
VEG   (2003-06-29 22:31) [6]

>Тих
Хочется компактнее:)


 
Fantasist   (2003-06-30 08:24) [7]


> Хочется компактнее:)


А в результатет код тяжело читать. Неужто места для пару лишних десяток байт не хватает?


> к. размер внутреннего массива меняется, т. е. приходится
> все размеры пересчитывать вручную, а это очень много кода


Используй std::vector. В нем уже все реализованно.


 
VEG   (2003-06-30 11:29) [8]

Страуструп не рекомендует таким образом массивы создавать, мол это не эффективно и не удобно. Он советует на основе этих самих векторов написать класс матрицы линеаризовав ее представление. У его описан неплохой пример, но я его не могу найти...


 
VEG   (2003-06-30 16:44) [9]

Нет ли у кого доки про такую реализацию?


 
k-man   (2003-06-30 17:18) [10]

2VEg
А ты совсем что ли на С перешел. Я например совмещаю Delphi
и C++.


 
k-man   (2003-06-30 17:19) [11]


> и C++.

и VC++


 
Fantasist.   (2003-06-30 19:23) [12]


> Страуструп не рекомендует таким образом массивы создавать,
> мол это не эффективно и не удобно


Он говорил о матрице типа: vector< vector<Type> >. У тебя же:


union TVal{
int i;
bool b;
char s[64];
}

struct TVar{
enum ibs {i, b, s};
char Name[32];
ibs Type;
TVal Value;
}

struct TData{
char Name[32];
char Comm[32];
std::vector<TVar> Values;
}

std::vector<TData> Groups;


Лениаризововать тут нечего.


 
VEG   (2003-06-30 20:31) [13]

>Fantasist.
Понятно. Спасибо! Только доки найти трудно по этому поводу - левых векторов много:)
>k-man
Практически да, но это временно.
>Я например совмещаю Delphi и C++.
В одном проекте? Через DLL?


 
VEG   (2003-06-30 20:32) [14]

Я бы не прочь эту байду (модуль) переписать на Delphi, но только при условии, что он нормально подключится к моему Сишному проекту, и без DLL!


 
k-man   (2003-06-30 21:22) [15]


> В одном проекте? Через DLL?

Нет. У меня три(сам удивляюсь) проекта. Стараюсь везде успевать. Хотя сложно.
Просто уж проекты очень интересные и разные.


 
Fantasist.   (2003-06-30 21:30) [16]


> Я бы не прочь эту байду (модуль) переписать на Delphi, но
> только при условии, что он нормально подключится к моему
> Сишному проекту, и без DLL!



Переходи на .NET :).



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
3-55447
Ann
2003-06-24 09:09
2003.07.17
FastReport


14-55840
panov
2003-07-01 15:36
2003.07.17
Удалена случайно ветка из форума


1-55575
Nucl
2003-07-02 19:54
2003.07.17
Как принудительно вызвать появление хинта у контрола ?


14-55807
Кен
2003-06-19 04:48
2003.07.17
Установил Дельфи 7 трайальную версию. Она меня поблагодарила за


14-55749
elf
2003-07-02 22:49
2003.07.17
Нет главного окна в win2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский