Помогите советом

15.10.2010
8
0
#1
Здравствуйте друзья!
Я - новичок как на этом форуме так и в программировании на с++.
Поэтому задаю вопрос и расчитываю на вашу помощь.

Возможно-ли создать множество переменных, скажем, BOOL MyVar[n] (можно, знаю ;) ) и в последствии это множество расширить до, к примеру, MyVar[n+r] ? Каким образом?
Благодарен за помощь.
 

grigsoft

Well-known member
15.11.2005
735
0
#2
Нельзя ни то, ни другое (если n - не константа).
Для это есть классы-коллекции - готовые (в STL), или.ваши собственные.
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
Нельзя ни то, ни другое (если n - не константа).
Для это есть классы-коллекции - готовые (в STL), или.ваши собственные.
Ну как так нельзя... Нельзя в C со множествами работать (для этого STL есть), но автор называет этим словом обычный массив... А динамику еще никто не отменял..... Да и в C++ почти все можно! :) А то что нельзя можно перефразировать так, что бы было можно :)

Возможно-ли создать множество переменных, скажем, BOOL MyVar[n] (можно, знаю ) и в последствии это множество расширить до, к примеру, MyVar[n+r] ? Каким образом?
Благодарен за помощь.
Давай уберем плохое слово "множество", оно имеет немного ни то значение, которые ты под ним указываешь :)
Нужно создать массив значений и в последствии его расширить :) Это можно...
Есть динамический подход к памяти, тоесть когда ты говоришь bool MyVar[n] - где n - это константа такой подход называется статическим, тоесть компилятор выделяет память сразу под n элементов и сделать больше ты практически(!!!) не можешь... Но если выделять память будешь ты сам, то по мере выполнения программы ты можешь менять размерность как тебе угодно (такой подход называется с динамическим)
в C++ выделением памяти занимается new ... В C функции malloc.

C++:
#include <iostream>

using namespace std;

void PrintArray (bool *Arr, int SizeArr) //Вспомогательная функция для вывода массива на экран
{
for (int i=0; i<SizeArr; i++)
{
cout<<Arr[i]<<'\t';
}
}

bool* NewDemension (bool *Arr, int *OldSize, int NewSize) //Функция новой размерности массива Arr - старый массив(указатель на его первый элемент
{														 //OldSize - ссылка на переменную в которой храниться размерность старого массива
//NewSize - новый размер массива
bool *ArrNew = new bool [NewSize]; //Формируем новый динамический массив с размерностью NewSize
for (int i=0; i<NewSize; i++) //Заполним новый массив старыми значениями 
{
if (i < *OldSize) //Если текущий элемент меньше кол-ва элементов старого массива
ArrNew[i] = Arr[i]; //То заполняем значение старого Если новый массив размерностью меньше, то все что > его размерности отбрасываем
else{ // Если текущий элемент > чем размерность старого массива 
cout<<"Arr["<<i<<"] = "; //То заполним его с клавиатуры
cin>>ArrNew[i];
}
}
*OldSize = NewSize; //Присваем значение переменной Размерности массива новое значение (по ее адресу)
delete[] Arr; //Удалим мусор - наш старый массив 	
return ArrNew; //Вернем указатель на новый массив (его первый элемент)
}

int main (void)
{
int ArrSize = 0; //Размер массива
cout<<"Input Size Array :"; 
cin>>ArrSize; //Введем размер

bool *Arr = new bool[ArrSize]; //Создадим динамический массив размером ArrSize

//Заполним массив с клавиатуры (помним про тип bool (только 0 или 1))
for (int i = 0; i< ArrSize; i++)
{
cout<<"Arr["<<i<<"] = ";
cin>>Arr[i];
}

PrintArray(Arr,ArrSize); //Выведим на экран
Arr = NewDemension(Arr,&ArrSize,5); //Изменим размерность на 5 элементов 

PrintArray(Arr,ArrSize); //Выведим заново на экран
}
 

mibin

Well-known member
29.01.2009
48
0
#5
ну определяй динамический массив, и походу делай делай с ним че хочешь

Добавлено: DarkKnight125:
Это че получается, если я правильно понял, ты просто подставил адрес другого массива и все? ))))) логично блин!
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Ну да))) Он же в памяти упорядочен)) Главное размер всегда помнить :) что бы че-нить лишнее не порчитать ;-) И ни дай бог перезаписать ;-)
 
15.10.2010
8
0
#7
Здравствуйте ещё раз!
Всем спасибо за советы и помощь!

Рылся в инете и надыбал интересную вещь - Векторы. Посмотрел пару примеров.
Если не ошибаюсь то добавить очередной элемент в вектор проще простого, правильно?
Вот и возник вопрос.

Написал свою струкуру, из элементов этой структуры должен состоять мой массив (вектор) и иметь возможность с лёгкостью расширяться. Есстественно с использованием вектора.
Такое возможно?

На всякий случай, вот структура
C++:
typedef struct _CLBoxItem
{
wchar_t		ItText[512];
HBITMAP		ItBitmap;
BOOL					ItEnabled;
BOOL					ItState;
} *CLBoxItem, LPCLBoxItem;