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

Тема в разделе "MS Visual C++", создана пользователем bearpaw, 15 окт 2010.

Наш партнер Genesis Hackspace
  1. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте друзья!
    Я - новичок как на этом форуме так и в программировании на с++.
    Поэтому задаю вопрос и расчитываю на вашу помощь.

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Нельзя ни то, ни другое (если n - не константа).
    Для это есть классы-коллекции - готовые (в STL), или.ваши собственные.
     
  3. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    А можно примерчиком?
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну как так нельзя... Нельзя в C со множествами работать (для этого STL есть), но автор называет этим словом обычный массив... А динамику еще никто не отменял..... Да и в C++ почти все можно! :) А то что нельзя можно перефразировать так, что бы было можно :)

    Давай уберем плохое слово "множество", оно имеет немного ни то значение, которые ты под ним указываешь :)
    Нужно создать массив значений и в последствии его расширить :) Это можно...
    Есть динамический подход к памяти, тоесть когда ты говоришь 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); //Выведим заново на экран
    }
     
  5. mibin

    mibin Well-Known Member

    Регистрация:
    29 янв 2009
    Сообщения:
    48
    Симпатии:
    0
    ну определяй динамический массив, и походу делай делай с ним че хочешь

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну да))) Он же в памяти упорядочен)) Главное размер всегда помнить :) что бы че-нить лишнее не порчитать ;-) И ни дай бог перезаписать ;-)
     
  7. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте ещё раз!
    Всем спасибо за советы и помощь!

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

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

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    возможно.
    Код (C++):
    vector<CLBoxItem> array;
     
Загрузка...

Поделиться этой страницей