Форум: "Потрепаться";
Текущий архив: 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.01 c