1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. bearpaw

    bearpaw Member

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

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

    grigsoft Well-Known Member

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

    bearpaw Member

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

    DarkKnight Well-Known Member

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

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

    Код:
    #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

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

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

    DarkKnight Well-Known Member

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

    bearpaw Member

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

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

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

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

    grigsoft Well-Known Member

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

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