Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
135 / 20 / 2
Регистрация: 06.05.2019
Сообщений: 1,359
Записей в блоге: 3
1

Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.?

10.08.2019, 23:35. Показов 6066. Ответов 119

Такой вопрос: я хочу создать одномерный массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться bool, с 10 по 14 будет храниться int. Я видел пример со структурами как раз на этом форуме, но я потерял ссылку на сайт? Можно ли создать такой массив и какими способами?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2019, 23:35
Ответы с готовыми решениями:

Создать базу из трех сотрудников, где будут храниться их имена
суть задачи: нужно создать базу из трех сотрудников, где будут храниться их имена, з.п, должности,...

Можно ли в com-сервере создать массив в котором будут храниться данные какое-то время
Можно ли в com-сервере сделать так, чтобы одна из процедур выполняла вычисления и заносила их в...

Создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых уже будут храниться различные типы данных
Мне нужно создать массив, содержащий массивы, которые, в свою очередь, содержат массивы, в которых...

Создать централизованную базу данных, где будут храниться все клиенты, всех офисов
Доброго времени суток ! Есть проблема одна. Несколько офисов, работают ведут учет клиентов в...

119
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,211
12.08.2019, 18:16 61
Цитата Сообщение от ValeryS Посмотреть сообщение
что всегда?
Цитата Сообщение от hoggy Посмотреть сообщение
объекты union разношерстные по определению термина union
открой букварь, и почитай что такое union.
а у меня терпение заканчивается.

Цитата Сообщение от ValeryS Посмотреть сообщение
я правильно понял что размер объекта union может варьироваться сам как хочет?
нет. ты не правильно понял.
для меня загадка: вот как ты мог так умыдриться понять?

Цитата Сообщение от ValeryS Посмотреть сообщение
дальше ? там 4 вопроса
там четыре глупых вопроса, ответ на которые - очевиден.

я спрошу тебя ещё раз: что ты пытаешься донести этими вопросами?

что у элемента массива статический размер,
который зависит от типа массива?

и что? что из этого следует?
что массив - априори однородный?
нет, не следует.

ты вообще понял смысл вот этой вот фразы?
Цитата Сообщение от hoggy Посмотреть сообщение
массив - лишь формально коллекция однотипных элементов.
по факту туда запихать можно все что угодно.
лишь бы места хватило.
в теме были приведены примеры-иллюстрации кода,
которые иллюстрируют это положение на практике.

ты этот код видел?
понял принцип действия?
ты понял, как работает код?

ты осознал, что в массив действительно можно напихать всё что угодно,
помимо объектов формального типа его элементов?
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,888
12.08.2019, 18:28 62
hoggy, я так понял отвечать не будешь
ибо это разрушает твой постулат:"массив из разных типов"
Цитата Сообщение от hoggy Посмотреть сообщение
открой букварь, и почитай что такое union.
и что же это такое?
1
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,211
12.08.2019, 18:40 63
Цитата Сообщение от ValeryS Посмотреть сообщение
я так понял отвечать не будешь
тебе сюда копипасту из учебника перепечатать что ли?

Цитата Сообщение от ValeryS Посмотреть сообщение
и что же это такое?
http://g.zeos.in/?q=c%2B%2B%20union&m=1

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
ибо это разрушает твой постулат:"массив из разных типов"
у меня такого постулата никогда не было

ты начинаешь раздражать своей неспособностью понять простые вещи

такое впечатление, что ты какой то альтернативно-одаренный сказочный эльф.
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,888
12.08.2019, 19:06 64
Цитата Сообщение от hoggy Посмотреть сообщение
у меня такого постулата никогда не было
а это что
Цитата Сообщение от hoggy Посмотреть сообщение
которые иллюстрируют работу с массивом,
элементами которого могут являться объекты различных типов.
не массив контейнеров в котором лежат объекты разных типов а массив объектов разных типов

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
тебе сюда копипасту из учебника перепечатать что ли?
перепечатай
особенно где написан вот этот кусок
Цитата Сообщение от hoggy Посмотреть сообщение
объекты union разношерстные по определению термина union
1
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
12.08.2019, 19:56 65
ValeryS, тут всё бестолку. Разные типы и структура в которой могут быть разные типы не отличимы для того кто не желает отличать.
Безотносительно к тому, что union не имеет отношения к формулировке вопроса:
Сам приём известен. Вообще, при жестких ограничениях в памяти это выход, но он не бесплатен. И хуже всего, то что вместо контейнера полиморфных указателей получается контейнер объединений. Размер соответствует максимальному размеру вариативного типа. И если придётся прикручивать тип который больше максимального, то придётся перекомпилировать весь проект от начала и до конца, везде где такой массив присутствует. Но профи рулят.
1
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
12.08.2019, 20:03 66
Цитата Сообщение от IGPIGP Посмотреть сообщение
то придётся перекомпилировать весь проект от начала и до конца, везде где такой массив присутствует
Для вас наверное будет откровением, но если вы измените хоть одну сущность подключаемой библиотеки, то вам точно также придется пересобирать все исходники, где эта библиотека присутствует. Но продолжайте хихикать дальше - идиоту улыбка к лицу.
0
609 / 414 / 151
Регистрация: 11.01.2019
Сообщений: 1,742
12.08.2019, 20:44 67
Цитата Сообщение от _stanislav Посмотреть сообщение
но есть класс std::any, нужна поддержка стандарта C++17.
А если вложить std::any в std::optional, можно пойти еще дальше и сделать массив с условно отсутствующими элементами )))
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,054
12.08.2019, 21:17 68
Цитата Сообщение от jugu Посмотреть сообщение
А если вложить std::any в std::optional, можно пойти еще дальше и сделать массив с условно отсутствующими элементами )))
std::any и так поддерживает отсутствие значения. Не нужно его в std::optional класть.
std::optional<T> это значение типа T в обёртке при поднятом флаге или упавший флаг.
std::any это значение любого типа, класса, структуры или отсутствие такового.
0
609 / 414 / 151
Регистрация: 11.01.2019
Сообщений: 1,742
12.08.2019, 21:46 69
Цитата Сообщение от SomniPhobia Посмотреть сообщение
std::any и так поддерживает отсутствие значения.
Да, действительно, там есть функция has_value. Это всё упрощает.
0
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,211
12.08.2019, 23:17 70
Цитата Сообщение от ValeryS Посмотреть сообщение
а это что
неужели до твоих мозгов не доходит смысл фразы:
"элементами массива могут быть объекты разного типа" ?

вот тебе простой пример без union, без variant, и даже без any:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
struct base
{
    virtual const char* msg() const noexcept { return "base"; }
};
 
struct der: base
{
    virtual const char* msg() const noexcept 
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        
        return "der"; 
    }
};
 
struct bro: base
{
    virtual const char* msg() const noexcept  
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        return "bro"; 
    }
};
 
int main()
{
    base array[3];
    
    new(array + 0) base;
    new(array + 1) der;
    new(array + 2) bro;
    
    // --- теперь массив и без всяких union хранит объекты 
    // --- принципиально различных типов
 
    for(const auto& el: array)
        std::cout << el.msg() << '\n';
}
я не понимаю, как можно,
невзирая на наличие рабочих кодов,
так и не вразуметь: формальный тип массива - лишь формальность.
он может хранить объекты любых типов,
какие в него засунет программист.
главное, что бы места в массиве хватило.

можно вообще закладывать объекты принципиально несовместимых типов,
смысл не измениться на на йоту.

так в примере выше использовался массив base array[3];
с тем же успехом можно использовать массив обычных чаров.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
struct base
{
    virtual const char* msg() const noexcept { return "base"; }
};
 
struct der: base
{
    virtual const char* msg() const noexcept 
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        
        return "der"; 
    }
};
 
struct bro: base
{
    virtual const char* msg() const noexcept  
    { 
        static_assert(
            sizeof(der) == sizeof(base),
            "invalid size"
        );
        return "bro"; 
    }
};
 
int main()
{
    char array[ sizeof(base) * 3];
    
    new(array) base;
    new(array + sizeof(base)) der;
    new(array + sizeof(base) * 2) bro;
    
    base* base_obj = (base*)array;
    base* der_obj  = ((base*)array) + 1;
    base* bro_obj  = ((base*)array) + 2;
    
    std::cout << base_obj->msg() << '\n';
    std::cout << der_obj->msg() << '\n';
    std::cout << bro_obj->msg() << '\n';
}

Цитата Сообщение от ValeryS Посмотреть сообщение
перепечатай
особенно где написан вот этот кусок
A union is a special class type that can hold only one of its non-static data members at a time.
для тех, кто в танке, тоже самое по-русски.
Объединения — это тип класса, в котором все данные разделяют одну и туже область памяти.
для тех, кто совсем тупой:
в один момент времени только один из членов union может быть активным.
это значит, что в один момент времени union хранит либо bool, либо int,
либо ещё что ты хочешь использовать.

и именно для этой цели: хранить объекты разных типов,
и завезли union в язык.

я так понял, причина твоих заблуждений в том,
что ты тупо не знаешь элементарных вещей.

мой тебе совет: прежде чем нести всякую чушь,
лучше выучи сначала язык.
1
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 00:03 71
Цитата Сообщение от hoggy Посмотреть сообщение
вот тебе простой пример без union, без variant, и даже без any:
И это прекрасный пример для ещё одного способа решения задачи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
 
using namespace std;
 
struct Base {
    virtual bool isDouble() { return false; }
    virtual bool isInt() { return false; }
    virtual bool isBool() { return false; }
};
 
struct Double : public Base {
    bool isDouble() override { return true; }
    Double(double d) : value(d) {}
    double value;
};
 
struct Int : public Base {
    bool isInt() override { return true; }
    Int(int i) : value(i) {}
    int value;
};
 
struct Bool : public Base {
    bool isBool() override { return true; }
    Bool(bool b) : value(b) {}
    bool value;
};
 
int main()
{
    Base *array[3];
    array[0] = new Int(10);
    array[1] = new Bool(true);
    array[2] = new Double(3.14);
 
    for (Base *base : array) {
        if (base->isBool()) {
            printf("%s\n", static_cast<Bool*>(base)->value ? "true" : "false");
        }
        else if (base->isInt()) {
            printf("%d\n", static_cast<Int*>(base)->value);
        }
        else if (base->isDouble()) {
            printf("%.2f\n", static_cast<Double*>(base)->value);
        }
    }
 
    return 0;
}
Добавлено через 5 минут
И ещё одного:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
struct Base {
    virtual bool isDouble() { return false; }
    virtual bool isInt() { return false; }
    virtual bool isBool() { return false; }
    void *value;
};
 
struct Double : public Base {
    bool isDouble() override { return true; }
    Double(double d) { value = new double(d); }
    ~Double() { delete static_cast<double*>(value); }
};
 
struct Int : public Base {
    bool isInt() override { return true; }
    Int(int i) { value = new int(i); }
    ~Int() { delete static_cast<int*>(value); }
};
 
struct Bool : public Base {
    bool isBool() override { return true; }
    Bool(bool b) { value = new bool(b); }
    ~Bool() { delete static_cast<bool*>(value); }
};
 
int main()
{
    Base *array[3];
    array[0] = new Int(10);
    array[1] = new Bool(true);
    array[2] = new Double(3.14);
 
    for (Base *base : array) {
        if (base->isBool()) {
            printf("%s\n", *static_cast<bool*>(base->value) ? "true" : "false");
        }
        else if (base->isInt()) {
            printf("%d\n", *static_cast<int*>(base->value));
        }
        else if (base->isDouble()) {
            printf("%.2f\n", *static_cast<double*>(base->value));
        }
    }
 
    return 0;
}
Добавлено через 8 минут
Кстати, этот паттерн применяется при построении AST деревьев: https://github.com/qt-creator/... AST.h#L126

Добавлено через 7 минут
Ну и чтобы совсем всё было честно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
 
using namespace std;
 
struct Double;
struct Int;
struct Bool;
 
struct Base {
    virtual Double *asDouble() { return nullptr; }
    virtual Int *asInt() { return nullptr; }
    virtual Bool *asBool() { return nullptr; }
};
 
struct Double : public Base {
    Double *asDouble() override { return this; }
    Double(double d) : value(d) {}
    double value;
};
 
struct Int : public Base {
    Int *asInt() override { return this; }
    Int(int i) : value(i) {}
    int value;
};
 
struct Bool : public Base {
    Bool *asBool() override { return this; }
    Bool(bool b) : value(b) {}
    bool value;
};
 
int main()
{
    Base *array[3];
    array[0] = new Int(10);
    array[1] = new Bool(true);
    array[2] = new Double(3.14);
 
    for (Base *base : array) {
        if (base->asBool()) {
            printf("%s\n", base->asBool()->value ? "true" : "false");
        }
        else if (base->asInt()) {
            printf("%d\n", base->asInt()->value);
        }
        else if (base->asDouble()) {
            printf("%.2f\n", base->asDouble()->value);
        }
    }
 
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
13.08.2019, 00:45 72
ValeryS, посмотрите какая красота - массив указателей на базовый класс... Не смартов, но годится. При чём тут разные типы с 0 по 4 и с 5 по 9 - оставим. Бог с ним. Главное, - массовость алгоритма. Вместо нескольких массивов мы имеем необходимость при итерации пользоваться либо динамической идентификацией либо самодельными идентификаторами за пределами типа. То есть как в С на уровне данных : isInt() и всё ок! А вы спрашиваете как обеспечить массовость на уровне предикат. Сортировка... Поиск... Чушь. Улыбка - идёт идиотам. Дебилам идёт серьезно-мрачное выражение. Аватаров много - суть одна. Вот такой полиморфизм.
1
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,888
13.08.2019, 05:59 73
Цитата Сообщение от hoggy Посмотреть сообщение
для тех, кто в танке, тоже самое по-русски.
читаем твою же цитату
A union is a special class type that can hold only one of its non-static data members at a time.
Объединения — это тип класса, в котором все данные разделяют одну и туже область памяти.
(выделено мной)
ТИП - самостоятельная единица, не чар, не инт, не ворд, а объединение
запихать в него можно все что угодно, но он от этого не станет ни чаром, ни интом, ни вордом, а останется объединением
Цитата Сообщение от hoggy Посмотреть сообщение
вот тебе простой пример без union, без variant, и даже без any:
и что я вижу
Цитата Сообщение от hoggy Посмотреть сообщение
base array[3];
массив base
Цитата Сообщение от hoggy Посмотреть сообщение
с тем же успехом можно использовать массив обычных чаров.
и я бы увидел массив char
а то что туда засунуто это уже другой вопрос

если я объявлю массив int arr[1]; а запихаю туда float(благо размер позволяет), это что станет массив float?
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,054
13.08.2019, 08:10 74
Цитата Сообщение от jugu Посмотреть сообщение
Да, действительно, там есть функция has_value. Это всё упрощает.
Да к и std::variant поддерживает возможность не иметь значение.
Таким образом, экземпляры следующих классов могут не иметь значения
std::optional<T>
std::any
std::variant<T>
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 08:32 75
Цитата Сообщение от IGPIGP Посмотреть сообщение
посмотрите какая красота - массив указателей на базовый класс...
Так вы уже разобрались в чем разница между объектной ориентацией и предметной? Или вы снова пришли потупить?
Может вы ещё скажете что наследование и полиморфизм - это тоже грязный мазохизм в С++?

Цитата Сообщение от IGPIGP Посмотреть сообщение
Вместо нескольких массивов мы имеем необходимость при итерации пользоваться либо динамической идентификацией либо самодельными идентификаторами за пределами типа
Вы, товарищ философ, по ссылке из моего топика проходили? Чего вы не философствуете на тему увиденного? Наверняка в вашей голове с натренированным предметным мышлением есть идеи, как лучше организовать построение абстрактных синтаксических деревьев. И есть что сказать по поводу убогости бытия С++ и задач, которые можно решать с его помощью, не используя одни массивы примитивов, которые невозможно отсортировать. Только кто вам вообще сказал, что тут или там сортировка и поиск является неотъемлемой частью работы алгоритма и его первостепенной задачей?

Я вам как непробиваемому идиоту повторю ещё раз: у каждой конкретной задачи есть свой способ решения.
Жизнь не заканчивается на объявлении 20-ти массивов с 20-ю разными типами.
Иногда надо json-распарсить, иногда интерпретатор написать.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Улыбка - идёт идиотам. Дебилам идёт серьезно-мрачное выражение.
Можете строить какую угодно гримасу. Хоть под идиота, хоть под дебила - дело ваше.
Просто перестаньте впаривать свои ценности вида "Так делать плохо, а как надо я сам не знаю, но так точно не надо, а то выглядит некрасиво".
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
13.08.2019, 11:00 76
Цитата Сообщение от WxMaper Посмотреть сообщение
Чего вы не философствуете на тему увиденного? Наверняка в вашей голове с натренированным предметным мышлением есть идеи, как лучше организовать построение абстрактных синтаксических деревьев.
В моём блоге есть топик с программой, суть которой, - построение AST. Задача выбора последовательности алгебраических операций с сохранением значимости.
Но строение AST это другая задача. Это не построение массива, хранящего смешанные типы. Решение основанное на наследовании лучше чем union, хотя к теме топика оно не относится. С++ это язык хорошо справляющийся с полиморфизмом поведения (шаблонные функции и виртуальные методы) и практически не поддерживающий полиморфизм данных. Не классов, а именно данных (для идиотов повторяю).
Именно по этой причине (называемой статической типизацией) С++ не поддерживает перегрузку основанную на типе возврата. То есть, если бы различие в типах данных оставалось внутренним делом полиморфного типа (на который смотрит указатель базового класса, ASТ - это оно, в частности), то проходя по массиву указателей на базовый тип можно легко воспользоваться полиморфизмом виртуальных функций. Но если требуется вынуть разнотипные данные на свет божий, то решения в стиле С++ нет. Тут могут быть только if'ы, switch'и и пр. методы внешней логики, которые поломают гибкость, читаемость, скорость.
Пусть мы имеем простой код, который должен сложить пару чисел, округлить по правилам округления действительных чисел до целого и вернуть результат. Тут простая перегрузка функций покажет, что С++ код выберет для целых простое сложение а для дабл return a+b+0.5;. И не будет перерасхода времени. Тип возврата у всех перегрузок int и нет проблем. А вот если задача потребовала бы возврата значений разного типа, то смысл перегрузки теряется. Нет синтаксиса, способного на одном вызове присвоить результат принимающей переменной, которая будет то одного, то иного типа, в зависимости от реальных типов переданных аргументов.
Именно по этой причине, массив разнотипных данных не может быть источником различных данных. Он может, но он не эффективен. Именно поэтому при разборе IPC сообщений, наиболее эффективным путём являлась бы типизация и разбор по массивам (и др структурам) разного типа. Весь язык построен на этом. Компилятор работая с исходным кодом, это делает и заставляет нас, это делать. Это порука скорости. Остальное - игры ума, который героически борется со здравым смыслом. Такие умы всегда очень упрямы и побеждают. Что касается жлобства, то вы и вам подобные бросают на форум грязь. Это вы начали говорить в хамском тоне и вынудили меня ответить. Этот пост в части аргументации не вам адресован и можете не отвечать (ах, если бы...). Как показала практика, толку не будет. Это текст для форумчан, которые подумают и согласятся или нет. Но подумают.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 11:32 77
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но строение AST это другая задача. Это не построение массива, хранящего смешанные типы.
Капитан очевидность в действии!

Цитата Сообщение от IGPIGP Посмотреть сообщение
Но если требуется вынуть разнотипные данные на свет божий, то решения в стиле С++ нет. Тут могут быть только if'ы, switch'и и пр. методы внешней логики, которые поломают гибкость, читаемость, скорость.
Забыли добавить подпись «И снова ваш КО.»

Цитата Сообщение от IGPIGP Посмотреть сообщение
Именно по этой причине, массив разнотипных данных не может быть источником различных данных.
Вы снова порите чушь. Массив разнотипных данных не может быть источником различных данных только конкретно в вашем примере. А для решения других задач мне не нужен ни поиск по массиву, ни возможность производить арифметические операции над его данными, мне просто нужно получить список разных сущностей с одной точкой доступа.
Когда я создаю массив и засовываю в него ДОМ, ТАНК, СОЛДАТА, ПУЛЮ, ВЗРЫВ, ДЕРЕВО, КАПЛЮ ДОЖДЯ - я не хочу искать в этом массиве какую-то конкретную сущность, я просто хочу пройтись по этому неотсортированному массиву и вызвать у всех объектов метод render(), чтобы обновить прорисовку. А может быть попутно захочу вызвать какой-то дополнительный метод, которого нет в родительском классе, но он есть в конечном объекте, например ДОМУ никуда лететь не нужно, а ПУЛЯ должна переместиться и у нее кроме render() есть ещё updatePosition() - привет свичи и ифы.
И только потому что вы своим предметным мышлением не можете представленный код спроецировать на решение какой-то абстрактной задачи, не значит, что это
Цитата Сообщение от IGPIGP Посмотреть сообщение
грязный мазохизм
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это вы начали говорить в хамском тоне и вынудили меня ответить.
Да что вы говорите? Т.е. это я сюда ввалился и первым начал нравоучения о том, что всё чем тут занимаются - какой-то мазохизм?
Цитата Сообщение от IGPIGP Посмотреть сообщение
это грязный мазохизм. Тут всегда найдутся пару любителей такого рода занятий.
Цитата Сообщение от IGPIGP Посмотреть сообщение
те кто создают массивы бульдого-носорогов это люди не умеющие пользоваться ни статическим ни динамическим полиморфизмом.
Цитата Сообщение от IGPIGP Посмотреть сообщение
А кто сказал, что такие задачи решают люди с умением абстрагировать. Они и не умеют. Они пытаются притянуть готовые абстракции к предметной области и получаются логические монстры.
То что вы умеете красноречиво поливать людей грязью не делает вас правым и уж тем более не делает вас умнее других.
Вы пришли и заявили, что наследование - это мазохизм.
Вы пришли и заявили, что объединения - это мазохизм.
Вы пришли и заявили, что то, как можно решить заданную задачу - это мазохизм.
Вы это сделали в одном сокрушительном комментарии, не предложив никакого решения, а просто проорали в стиле "вам это не нужно". Нет нужно, раз такой вопрос есть.

И я для вас повторю один из своих ответов:
Цитата Сообщение от Nexi99 Посмотреть сообщение
я хочу создать одномерный массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться bool, с 10 по 14 будет храниться int.
Цитата Сообщение от WxMaper Посмотреть сообщение
Массив есть? Есть.
Массив одномерный? Одномерный.
double с 0 по 4 получить можно? Можно.
bool с 5 по 9 получить можно? Можно.
int с 10 по 14 получить можно? Можно.
Так и в чем ваша проблема, объясните? В том что это выглядит некрасиво? Условие задания тоже выглядит некрасиво, но если бы ТСу надо было создать несколько массивов и отсортировать их, он бы так и сделал: создал три массива и отсортировал их. Но ему это было не нужно, его интересовало только
Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.?
и ему предложили варианты как это можно сделать. А как он это будет применять и будет ли вообще - это его право, не ваше.

Добавлено через 9 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Этот пост в части аргументации не вам адресован и можете не отвечать (ах, если бы...).
Этот пост адресован мне как минимум потому, что вы меня процитировали.
Как и в первом своём сообщении в этой теме, где вы решили попрактиковать на мне свои навыки внушения
Цитата Сообщение от IGPIGP Посмотреть сообщение
WxMaper, вам это кажется.
0
183 / 158 / 27
Регистрация: 13.08.2019
Сообщений: 606
13.08.2019, 12:09 78
Всем привет!
Если автору вопроса хочется создать массив разнотипных элементов классическим способом, то естественно, что ничего не получится.
Однако, Вы можете воспользоваться вариативностью и получите одномерный массив из вариантов. Чувствуете разницу? Одномерный массив из вариантов и одномерный массив из double, int, bool. В конечном итоге всё будет упираться в тот факт, что в массиве должны быть элементы одного типа. Вариант, строки, int-ы или bool-ы - не суть. Суть, чтобы они пренадлежали одному типу данных.
WxMaper привёл реализацию на первой странице. Да, это решение вашей проблемы: реализация с использованием варианта. Имеет право на жизнь? Да вполне. Фактически, J-SON работает с вариантами.
С таким же успехом Вы можете создать одномерный массив структур. Понимаете? На этот раз элементом массива будет структура, внутри которой хранятся разнотипные элементы или однотипные. Но Вы не сможете создать одномерный массив из double, int, bool - одновременно, без дополнительных привидений к единому типу/представлению. Память не обманtшь и резервироваться она должна соответствующим образом под указанный тип данных.
2
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
13.08.2019, 14:04 79
Цитата Сообщение от Хуба-Буба Посмотреть сообщение
Но Вы не сможете создать одномерный массив из double, int, bool - одновременно
Хуба-Буба, именно это я и имел ввиду.

Добавлено через 11 минут
Цитата Сообщение от WxMaper Посмотреть сообщение
Массив есть? Есть.
Массив одномерный? Одномерный.
double с 0 по 4 получить можно? Можно.
bool с 5 по 9 получить можно? Можно.
int с 10 по 14 получить можно? Можно.
Нельзя. Массива нет. Массив это абстракция уровня метаданных. По сути это шаблон, но реализованный средствами компилятора. И дело даже не в том, что массив целых и массив дабл это разные инстансы (типы). Даже массив из четырёх целых и массив из пяти целых это разные типы. Когда объявляется массив int array_int[5]; происходит как бы инстанцирование шаблона. То есть конкретизация/опредмечивание. Мы спускаемся от уровня абстракции - массив (это ещё не тип, а обобщение для всех конкретизаций) до уровня массив целых чисел из пяти штук на данной машине.
Остальные пункты тоже не блещут. По указателю на сырую память можно прочесть всё что угодно, а в массив байт unsigned char записать и прочесть можно всё что угодно, но он не перестанет быть массивом unsigned char.
Вопрос топика о не совместом. И об этом я сказал и повторю столько раз сколько потребуется, но уже не вам. Многоликий вы наш.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 14:25 80
Цитата Сообщение от IGPIGP Посмотреть сообщение
Нельзя. Массива нет.
Дальше вашу писанину можно было даже не читать. Т.е. вы утверждаете, что MyStruct a[100]; - это не инициализация массива?

Цитата Сообщение от IGPIGP Посмотреть сообщение
По указателю на сырую память можно прочесть всё что угодно
А зачем вы своими указателями лезете в сырую память? Этого нет ни в условии ни в решении.
Прошу вас, остановите этот поток бреда.

Цитата Сообщение от IGPIGP Посмотреть сообщение
я сказал и повторю столько раз сколько потребуется
Вы повторяете и повторяете очевидную вещь, что
Цитата Сообщение от Хуба-Буба Посмотреть сообщение
Но Вы не сможете создать одномерный массив из double, int, bool - одновременно
вас вообще никто об этом не спрашивал. И никто не пытался с вами спорить.

Сходите умойтесь, в конце концов, и перечитайте на ясную голову САМОЕ ПЕРВОЕ сообщение в этом топике:
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я видел пример со структурами как раз на этом форуме
даже автор этого вопроса ЗНАЕТ что ему надо будет работать со структурами, а не запихивать double в int и наоборот.

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Многоликий вы наш.
Такое умозаключение больше к вам подходит или к тому товарищу, который активно плюсует вашу бредятину.
Или к тому товарищу, который имея полномочия, выделяет свои сообщения как решение вопроса, однако решения в его ответах не наблюдалось.
Уж не знаю кто, но кто-то эти галочки удалил из шапки топика, сомневаюсь что это был тот, кто их туда загнал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2019, 14:25

Получить массив, где будут храниться индексы строк матрицы, в которых есть равные элементы
2. Дан прямоугольный массив A. Получить линейный массив B, в котором будут храниться номера тех...

Создать класс, в котором информация будет храниться в хеше.
А подскажите еще, мне нужно создать класс , в котором в хеше будет храниться информация, ее...

Комментарии. Создать модуль, в котором будет храниться процедура создания картинки
Привет всем! помогите с комментариями к программе пожалуйста... Создайте модуль, в котором будет...

дан массив целых чисел в котором храниться 20 тысяч элементов
дан массив целых чисел в котором храниться 20 тысяч элементов.Найти в массиве первый минимальный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.