Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2015, 15:31   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Инициализация динамического массива

Всем привет!

Подскажите пожалуйста как инициализировать динамический массив при

обьявлении ?

к примеру как этот.

Код:
int a[5] = {65,6,7,8,9};
Код:
int *a = int [5] ??????
RAFA91 вне форума Ответить с цитированием
Старый 28.07.2015, 15:51   #2
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Код:
#include <vector>

int main()
{
    std::vector v{65,6,7,8,9};
}
220Volt вне форума Ответить с цитированием
Старый 28.07.2015, 15:57   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно memset() использовать если нужно инициализировать одним и тем же байтовым значением.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2015, 16:03   #4
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

а как самому написать класс который принимает

{65,6,7,8,9}; ?
RAFA91 вне форума Ответить с цитированием
Старый 28.07.2015, 16:08   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то типа:
Код:
class myvec{
 private: int *array;
 public: myvec(int l,...){
  int i=0;for(int *p=&l;p;i++,p++);
  array=new int[i];
  for(int *p=&l;p;i++,p++) array[i]=*p;
 }
};
Писал с потолка по памяти.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2015, 16:17   #6
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
а как самому написать класс который принимает

{65,6,7,8,9}; ?
http://en.cppreference.com/w/cpp/uti...itializer_list
Внизу есть пример.
220Volt вне форума Ответить с цитированием
Старый 28.07.2015, 19:04   #7
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Всем привет!

Подскажите пожалуйста как инициализировать динамический массив при

обьявлении ?

к примеру как этот.

Код:
int a[5] = {65,6,7,8,9};
Код:
int *a = int [5] ??????
Код:
int a[5]
Обычный массив. (Выделяется в стеке)
Код:
int *a = new int[5]
массив. (Выделяется в виртуальной памяти)

Вообще динамический массив, это массив с переменным размером...

ЗЫ: поэтому нужно писать свой объект, с конструктором и аллокатором... или юзать std::vector
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 28.07.2015, 22:50   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

В С++11 такая возможность уже есть:
Код:
#include <iostream>

using namespace std;

int main(){

    int n;
    n=2;

    int *a = new int [n]{1,2};
    cout << a[0] << endl;
    cout << a[1] << endl;
    
    return 0;
}
Результат работы

Но вот, что произойдет, если в данном случае в n будет записано 1, а не 2 и более, я даже не знаю
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 29.07.2015, 14:41   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что-то типа:
Код:
class myvec{
 private: int *array;
 public: myvec(int l,...){
  int i=0;for(int *p=&l;p;i++,p++);
  array=new int[i];
  for(int *p=&l;p;i++,p++) array[i]=*p;
 }
};
Писал с потолка по памяти.
что то стремно мне это запускать

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
В С++11 такая возможность уже есть:
[
мы слава богу не в с++ 11 , а в Microsoft Visual C++ 6.0
RAFA91 вне форума Ответить с цитированием
Старый 29.07.2015, 15:52   #10
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
что то стремно мне это запускать
Вполне нормальное решение этой проблемы. Только рекомендуют использовать функции va_arg, va_start и va_end, с ними не должно быть проблем, если какой-то из аргументов будет передаваться не через стек.

Код:
#include <iostream>
#include <cstdarg>

using namespace std;


int* newMyArray(int size,...){

    int *array = new int[size];

    va_list args;
    va_start(args, size);

    for(int i=0;i<size;i++){
        array[i]=va_arg(args, int);
    }

    va_end(args);

    return array;
}



int main()
{

   int *array = newMyArray(5,3,2,1,10,-5);

   for(int i=0;i<5;i++){
       cout << array[i] << " ";
   }

    cin.get();

    return 0;
}
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация массива. dmitryfisko Помощь студентам 4 03.02.2014 21:36
Инициализация массива строк в Си majuw Помощь студентам 0 19.04.2013 22:55
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
инициализация массива parazzzitka93 Общие вопросы C/C++ 11 02.04.2011 21:01
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36