135 / 20 / 2
Регистрация: 06.05.2019
Сообщений: 1,331
Записей в блоге: 3
1

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

10.08.2019, 23:35. Показов 6052. Ответов 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
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
13.08.2019, 15:01 81
Цитата Сообщение от WxMaper Посмотреть сообщение
Т.е. вы утверждаете, что MyStruct a[100]; - это не инициализация массива?
Не путайте инстанцирование и инициализацию. Я не писал о инициализации. Есть подозрение, что вы лучше себя чувствует с Java потому как не видите границу между типом и значением.
Цитата Сообщение от WxMaper Посмотреть сообщение
вашу писанину можно было даже не читать
Я об этом и просил. Вам - бестолку.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 15:31 82
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не путайте инстанцирование и инициализацию. Я не писал о инициализации.
А я не писал о инстанцировании. Вы тему то не переводите.
Вы написали довольно однозначно: «Массива нет» и я задал вам однозначный вопрос: «MyStruct a[100]; - это не массив?». Я ничего не путаю, это у вас каша в голове. Где ваш ответ на этот вопрос? Зачем вы тему переводите?

Цитата Сообщение от IGPIGP Посмотреть сообщение
Есть подозрение, что вы лучше себя чувствует с Java
Снова внушение практикуете?
0
Модератор
Эксперт CЭксперт С++
4533 / 4172 / 765
Регистрация: 07.10.2015
Сообщений: 8,621
13.08.2019, 15:59 83
Справедливости ради: Вы не так задали вопрос. Не
Цитата Сообщение от WxMaper Посмотреть сообщение
я задал вам однозначный вопрос: «MyStruct a[100]; - это не массив?»
А
Цитата Сообщение от WxMaper
MyStruct a[100]; - это не инициализация массива?
Цитата Сообщение от WxMaper Посмотреть сообщение
Я ничего не путаю
Увы, путаете... Выражайтесь точнее...
2
135 / 20 / 2
Регистрация: 06.05.2019
Сообщений: 1,331
Записей в блоге: 3
13.08.2019, 16:06  [ТС] 84
Ребята советов уже много я посмотрю и подумаю что с этим всем делать, так что за всё спасибо буду разбираться.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
13.08.2019, 16:47 85
Увы, путаете... Выражайтесь точнее...
Вы правы. Но это не отменяет того факта, что массив есть, хоть он и объявлен без инициализации.
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
13.08.2019, 18:08 86
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ребята советов уже много я посмотрю и подумаю что с этим всем делать, так что за всё спасибо буду разбираться.
Nexi99, вот это:
Цитата Сообщение от Nexi99 Посмотреть сообщение
я хочу создать одномерный массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться bool, с 10 по 14 будет храниться int.
Это описание структуры по способу размещения:
{int, int, int, int, int, double, doudle, double, double, double}
Размеры int и double , обычно, различны. Но даже если бы и совпадали, то была бы проблема в доступе (естественном для массива). Это потому что не существует способа перегрузить оператор индексирования так, чтобы он возвращал по 5-ти первых индексов первые пять элементов типа int, а по пяти следующих - пять элементов как double. А если бы была (страшный сон) то нет синтаксиса использования. В правой части такого вызова - оператор[], а что в левой части выражения присвоения?
C++
1
What_type a = array_int_or_double[i];// нельзя сделать тип What_type  зависимым от значения индекса (адреса от начала)
Правильнее (быстрее и проще) всего захардкодить это как структуру. Минусом будет не расширяемость. Плюсом - скорость и независимость типов. Независимость в том, что вы сможете распределить константность и возвращать ссылки или значения на члены так как пожелаете. Но доступ через точку а не через скобки. В этом смысле ваш вопрос не совместим по использованным понятиям. А если элементами сделать структуры, это уже совсем другой вопрос.
А разговоры, подобные тому, что вы увидели, - обычное дело. Упрямство - попутчик тупости.
0
135 / 20 / 2
Регистрация: 06.05.2019
Сообщений: 1,331
Записей в блоге: 3
14.08.2019, 22:22  [ТС] 87
Ребята спасибо за советы я посмотрю и проработаю наилучший для меня вариант?
0
Don't worry, be happy
17149 / 10032 / 1933
Регистрация: 27.09.2012
Сообщений: 24,973
Записей в блоге: 1
14.08.2019, 22:24 88
Цитата Сообщение от Nexi99 Посмотреть сообщение
я посмотрю и проработаю наилучший для меня вариант?
Это ты у нас разрешения спрашиваешь?
2
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
15.08.2019, 00:34 89
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ребята спасибо за советы я посмотрю и проработаю наилучший для меня вариант?
Nexi99, я уж не знаю как выразить желание увидеть переформулированный вопрос. Создать разнотипный массив невозможно, но для хранения разнотипных данных есть множество вариантов.
Хранение чисел с плавающей точкой и целых в одинаковых по размеру объёмах это перерасход. Но ещё хуже дела обстоят с логическим типом, он ещё сильнее зависит от реализации. Для СС (MVS), например, был размер равный int, а потом( с версии старше 4. ..., - не помню какой) стал - байт. Это не радостно, кстати, с моей точки зрения. Экономия памяти за счёт скорости сегодня, это не путь к победе. Ради скорости приходится умножать ядра (частота имеет предел соотношения стоимости и затрат)... А память можно наращивать экстенсивно. Но не будем о грустном. Хотелось бы узнать о какой задаче шла речь.
1
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,046
15.08.2019, 09:56 90
Цитата Сообщение от IGPIGP Посмотреть сообщение
Хотелось бы узнать о какой задаче шла речь.
Этот вопрос задавался несколькими субъектами в начале этой темы. Однако, ответ на него со стороны Nexi99 так и не был получен.
Там какие - то секретные разработки проходят.

Добавлено через 1 минуту
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ребята спасибо за советы я посмотрю и проработаю наилучший для меня вариант?
Как пожелаешь. Я тебе не могу запретить это.
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
15.08.2019, 10:08 91
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Там какие - то секретные разработки проходят.
Хорошие разработки всегда содержат интригу, но, скорее всего тут не это главное. Просто, формулировка получилась неудачной, а удачная, может сильно отличаться от той, что получилась. В итоге, - тишина. А может ТС устал от звуков битвы. Посмотрим. Сам по себе вопрос может быть и уровня построения AST на "полиморфных" указателях. То есть, достаточно сложным может быть.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
15.08.2019, 10:14 92
Цитата Сообщение от IGPIGP Посмотреть сообщение
Просто, формулировка получилась неудачной
Судя по другим вопросам ТС, пишет он вовсе не на С++, а на Си-подобном MQL4.
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
15.08.2019, 10:53 93
Цитата Сообщение от WxMaper Посмотреть сообщение
Судя по другим вопросам ТС, пишет он вовсе не на С++, а на Си-подобном MQL4.
К сожалению, не имею представления об этом языке. Сам вопрос интересен.
WxMaper, там где я говорил, что массива нет, я имел ввиду, что каждый массив определяется типом элемента и их количеством. То есть массив целых из 5 штук есть, массив MyStruct из ста штук есть. Но нет массива, вообще.
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
#include<iostream>
 
using namespace std;
 
struct def_struct
{
    int a;
    def_struct(int a_ = 123)
        :a(a_)
    {}
};
 
def_struct def_initiated[10]; //это - 
//1 определение типа def_initiated[10] - тип размером 10*sizeof(def_initiated), поддерживающий def_initiated& operator[](size_t) и пр.
//2 создание объекта опрделенного типа ( def_initiated[10] см. п.1 выше  )
//3 инициализация по умолчанию - созданного объекта посредством инициализации по умолчанию его элементов 
// последнее происходит для всех глобальных определений
int main()
{
    for(const auto & a : def_initiated)
    cout << a.a <<  ' ' ;
    
    return 0;
}
как-то так это можно проиллюстрировать. То есть при объявлении int a; тип уже известен компилятору и происходит создание и инициализация (if any), а при объявлении int a[3], int b[4]; создаются два типа int[3] и int[4], а создание и инициализация - потом. То есть, сначала нужно как бы инстанциировать щаблон похожий на template<size_t, typename ElemType> Built_in_C_array.
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
15.08.2019, 11:04 94
Ради святого Страуструпа, я уже не хочу снова это обсуждать.
Вдаваться в такие тонкости - это хорошо, но только не в рамках данного форума и раздела
Я вас услышал и понял вашу точку зрения.
1
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,046
15.08.2019, 11:12 95
Цитата Сообщение от IGPIGP Посмотреть сообщение
К сожалению, не имею представления об этом языке
Я тоже не имею представления.

Про этот код что скажите https://www.cyberforum.ru/post13765957.html (внизу поста)?
Выделили блок памяти (условно без привязки к типу) и заполнили данными, которые обличаются типами только на время заполнения и считывания. А всё остальное время блок памяти обезличен в отношении типа.
В случае заполнения массива / контейнера экземплярами std::any, std::optional и прочими обёртками или задействование union -> Один или разный тип имеют элементы массива / контейнера зависит от того, какой субъект это обдумывает: IGPIGP или WxMaper или Croessmah или any, у каждого своя правда. Консенсуса пока не достигли?
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
15.08.2019, 12:23 96
Цитата Сообщение от IGPIGP Посмотреть сообщение
def_struct def_initiated[10]; //это -
//1 определение типа def_initiated[10] - тип размером 10*sizeof(def_initiated), поддерживающий def_initiated& operator[](size_t)
Бред.
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,046
15.08.2019, 12:24 97
Я причесал свой код.
Кликните здесь для просмотра всего текста

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <vector>
 
template <typename T, size_t N>
size_t count_arr(T(&arr)[N])
{
    return sizeof(arr) / sizeof(arr[0]);
}
 
template <typename T, size_t N>
size_t size_element_arr(T(&arr)[N])
{
    return sizeof(std::remove_reference<decltype(*arr)>::type);
}
 
template <typename T>
void push(void* &ptr_void, T value)
{
    T* ptr_type = static_cast<T*>(ptr_void);
    *ptr_type = value;
    ptr_void = static_cast<void*>(ptr_type + 1);
}
 
template <typename T>
void read(void* &ptr_void, T& value)
{
    T* ptr_type = static_cast<T*>(ptr_void);
    value = *ptr_type;
    ptr_void = static_cast<void*>(ptr_type + 1);
}
 
int main()
{
    double d[]{ 1.5, 45.28, 316, -20.4 };
    char c[]{ 'a', 'u', 't', 'o'};
    int i[]{ 25, 14};
    bool b[]{ true, false, false, true, true, true };
    std::pair<size_t, char> p[]{ { 1, 'a' }, { 2, 'b' }, { 3, 'c' } };
 
    size_t count_bytes =
        size_element_arr(d) * count_arr(d) +
        size_element_arr(c) * count_arr(c) +
        size_element_arr(i) * count_arr(i) +
        size_element_arr(b) * count_arr(b) +
        size_element_arr(p) * count_arr(p);
    std::cout << "count_bytes = " << count_bytes << "\n";
    void* arr = calloc(1, count_bytes);
    void* arr2 = arr;
    void* arr3 = arr;
    void* arr4 = arr;
    for (auto& value : d)
        push(arr2, value);
    for (auto& value : c)
        push(arr2, value);
    for (auto& value : i)
        push(arr2, value);
    for (auto& value : b)
        push(arr2, value);
    for (auto& value : p)
        push(arr2, value);
    std::cout << "\n";
    for (size_t idx = 0u; idx < count_bytes; ++idx)
    {
        char value;
        read(arr4, value);
        std::cout << static_cast<short>(value) << " ";
    }
    std::cout << "\n";
    std::cout << "\n";
    for (size_t idx = 0u; idx < count_arr(d); ++idx)
    {
        double value;
        read(arr3, value);
        std::cout << value << "\n";
    }
    for (size_t idx = 0u; idx < count_arr(c); ++idx)
    {
        char value;
        read(arr3, value);
        std::cout << value << "\n";
    }
    for (size_t idx = 0u; idx < count_arr(i); ++idx)
    {
        int value;
        read(arr3, value);
        std::cout << value << "\n";
    }
    for (size_t idx = 0u; idx < count_arr(b); ++idx)
    {
        bool value;
        read(arr3, value);
        std::cout << std::boolalpha << value << "\n";
    }
    for (size_t idx = 0u; idx < count_arr(p); ++idx)
    {
        std::pair<size_t, char> value;
        read(arr3, value);
        std::cout << value.first << " " << value.second << "\n";
    }
    free(arr);
 
    return 0;
}
0
Миниатюры
Можно ли создать массив в котором с 0 по 4 элемент будут храниться double, с 5 по 9 будут храниться int и т.д.?  
Комп_Оратор)
Эксперт по математике/физике
8719 / 4426 / 598
Регистрация: 04.12.2011
Сообщений: 13,262
Записей в блоге: 16
15.08.2019, 13:34 98
SomniPhobia, блок сырой памяти это блок сырой памяти. Если абстракции массива, структуры, объединения распылить на атомы и тщательно перемешать, то будет гомогенный байт-коктейль. То есть, сделать то можно, но вопрос был иначе поставлен. Вот почему, интересно в какой задаче возникла потребность. Тогда можно будет уточнить саму потребность.

Добавлено через 5 минут
Цитата Сообщение от rat0r Посмотреть сообщение
Бред.
rat0r, и я рад вас видеть. Может преодолеете бессловесные междометия и скажете вразумительно? То что я описывал это псевдо описание и там есть оговорки:
Цитата Сообщение от IGPIGP Посмотреть сообщение
нужно как бы инстанциировать шаблон похожий на template<size_t, typename ElemType> Built_in_C_array.
Или вы не согдасны с тем, что при объявлении int a[10]; происходит объявление типа (а не только объекта этого типа) отличного от int a[20];
?
О чём тут речь была, читали?

Добавлено через 1 час 1 минуту
Цитата Сообщение от rat0r Посмотреть сообщение
тип размером 10*sizeof(def_initiated)
Тут я опечатался. Вместо имени типа элемента: def_struct имя объекта массива воткнул. Вынул фрагмент из другого кода и копипаст подвёл.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
15.08.2019, 16:18 99
Цитата Сообщение от IGPIGP Посмотреть сообщение
Или вы не согдасны с тем, что при объявлении int a[10]; происходит объявление типа (а не только объекта этого типа)
А где написано, что происходит такое объявление типа?
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
15.08.2019, 16:47 100
Цитата Сообщение от rat0r Посмотреть сообщение
А где написано, что происходит такое объявление типа?
Поддерживаю, тоже интересно узнать. В обычных лекциях по С++ такого явно не найти

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


Слева компилятор msvc, справа - mingw (демонстративнее).

Мне кажется, это уже больше вопрос внутренней кухни компилятора С++, а не самого языка программирования
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2019, 16:47

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

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

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

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

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


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

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

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