Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.07.2023
Сообщений: 4

Кто хочет немного подумать над двухмерными массивами?

30.07.2023, 20:47. Показов 3516. Ответов 62

Студворк — интернет-сервис помощи студентам
В С++ мы знаем, что тип данных string - это массив состоящий из типа данных char. Но если сделать массив с типом данных string это будет считаться двухмерным массивом?

Эта мысля мне пришла ночью и я не смог таки уснуть думая над этим вопросом.

Вот вам пример такого массива:

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
 
int main() {
 
    string a[3] = { "How", "are", "you?" };
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2023, 20:47
Ответы с готовыми решениями:

Кто хорошо разбирается в accsess, прошу вас подумать над ниже описанным и отписаться
Долго думаю, не могу понять как это сделать, скоро голова поломается. Создаю программу в делфи и прицепляю базу. Есть таблицы продукты и...

Кто хочет поработать над мини-игрой?
Всем добрый день. Недавно решил написать мини-игру на php + javaScript в целях повышения уровня знаний в web программировании ну и какой...

Робота с двухмерными массивами
У нас есть двухмерный массив 10 на 10. И еще ми имеем одномерный массив (строку) - через которую вводим &quot;HelloWOrld&quot;. И ми...

62
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.08.2023, 13:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
А раньше значит такого требования даже не было.
Вы говорите о внутреннем представлении, а я говорю не только о нём. На уровне интерфейса массив строк std::string это двух-мерный массив char. Причём, для малых строк при определённом стечении обстоятельств (SSO) их массивы могут лежать на стеке, тогда как для больших - всегда в куче. И они могут ре-аллоцироваться.
Royal_X, вопрос здесь шире. Есть очень мало математиков, которые могут быть физиками (Байт, zayats80888 и ещё несколько участников к ним относятся), а остальные - псевдо математики. У них всё более-менее хорошо с анализом, но с синтезом (обобщением, в частности) - беда. Пример с данной темой - иллюстрация. Смотрите, мы умеем талдычить святую книгу и петь хором, но когда появляется чуть чуть иной мотив или строфа - авария.
Страуструп сказал std::vector это массив. То есть: "Я есть Вектор!". И все повторяют. И из этого следует что вектор векторов, это двух-мерный массив. И тут все фанатично преданы и согласны.
Но отойдя на шаг в сторону мы получаем бурю когнитивного диссонанса. Именно в этом я вижу ценность данной темы.

Добавлено через 7 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
Опять от вас философия ни о чем, не имеющая к вопросу отношения.
Имеющая. И то что вы этого не понимаете, совершенно закономерно. Проверено не раз. Мы же считаем вектора векторов двумерными массивами? А массивы указателей на буфера в куче тоже? Строки строк имеют те же основания там же и быть. И в пределах каждой строки вы можете использовать арифметику указателей, кстати (но осторожно, - реалок возможен). Потому что там таки последовательное хранение. Это не мапа (и не мавпа).
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,706
01.08.2023, 13:43
IGPIGP, мне вообще плевать на то, что сказал Страуструп, он не шахиншах и не бог. Язык очень изменился с тех пор, когда он ещё с ним был связан. Касаемо форумных математиков, то мне ничего не нужно говорить, я сам знаю, кто есть кто, т.к. часто бываю в разделе Математика. Насчёт Байт вы правы, он хороший математик. Более того, я совершенно согласен с тем, что писал Байт в этой теме, а именно:
- на утверждение ТС, что "тип данных string - это массив состоящий из типа данных char.", Байт ответил "не совсем".
- дальше он писал, что к элементам можно обращаться по индексу.
- он также писал, что "класс string содержит помимо самой строки еще кой-какие поля". С этим я тоже согласен, ибо string, например, хранит данные о size и capacity.
Таким образом, я полностью согласен с уважаемыми Байт, eva2326 и SmallEvil, что string это не массив char, даже если к символам можно обращаться по индексу.
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.08.2023, 14:18
Цитата Сообщение от IGPIGP Посмотреть сообщение
Мы же считаем вектора векторов двумерными массивами?
Кто мы ?
Никто так не считает, наверное кроме вас.
Ну да ладно, я не ссорится писал.
Но вам так сложно признать что льете воду и говорите что это мед.
Удачи.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.08.2023, 14:28
Чуток сбоку от темы. Но мне стало любопытно. Вот есть такая штука
C++
1
2
string s = "abc";
char a = s[5];
Что будет?
Я не знаю, как реализован в string оператор [].
Неужели выкинет исключение? Это как-то грубо. Или вернет 0 7 Что. имхо. было бы логичнее
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,706
01.08.2023, 14:30
Байт, поэтому и юзают, наверное, at()
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 8,999
01.08.2023, 14:31
Цитата Сообщение от Байт Посмотреть сообщение
Что будет?
В случае и с массивом и с std::string поведение одинаково - UB.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.08.2023, 14:33
Или в том же контексте
C++
1
2
s[5]='f';
cout << s'
Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
Байт, поэтому и юзают, наверное, at()
А он что вернет?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.08.2023, 14:34
Цитата Сообщение от Royal_X Посмотреть сообщение
Таким образом, я полностью согласен с уважаемыми Байт, eva2326 и SmallEvil, что string это не массив char, даже если к символам можно обращаться по индексу.
И я не писал, что строка это массив char. Не писал. И то что Страуп, - "Подвижник, отшельник, праведник, мученик, но не святой!", я тоже не спорю. Я как раз и писал о религиозно-благоговейном отношении к святому слову, независимо от того кто его написал, - комитет, ст. Герб, ст. Скотт или ст. Бьярне. Это отношение стало массовым в плюсах по ещё одной вполне очевидной причине. Прикладные математики есть не только в плюсах. Однако в плюсах они проходят дополнительную обработку. Ибо сказано:
"«Си» позволяет очень просто выстрелить себе в ногу. На «Си++» сделать это сложнее, но, когда вы это делаете, отрывает всю ногу."
В С количество ситуаций, в которых вы можете выстрелить себе в ногу составляет около двух десятков. Правда, возникают они часто и в большом недисциплинированном коде, становятся очень трудноизбегаемы. А в С++ количество ситуаций, где вы можете выстрелить себе в любую часть тела, исчисляется десятками тысяч (фигурально говоря). Вот почему, настоящий плюсовик надевает один чехол на свечку, один - на клавиатуру, а один на голову. И пробирается, строго, проверенными и узкими стёжками между бескрайних, UB'ийственных минных полей С++ повторяя Струсе-упаси, Страусе-упаси, Страусе-упаси.
Где же тут помнить, что словари называют ассоциативными массивами еще с достраусовых времён. Костность от слова кость. Скелет помогает нам в идти в бурях этого страшного мира. Реально страшного, Royal_X. Мне в моём городе это видно и слышно каждую ночь. Вам видимо ещё нет, но может быть скоро вы поймёте о чем я.
2
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,706
01.08.2023, 14:34
Байт, выкинет исключение std::out_of_range полагаю
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 8,999
01.08.2023, 14:36
Я вообще х.з., зачем в обсуждении все ударились в детали языка.
Вопрос ТС носит чисто философский характер.
В языке C++ нет термина "двумерный массив", поэтому так можно назвать всё, что душе угодно, не докопаешься.
Можно ли назвать массив строк "двумерным массивом символов"? Да пожалуйста.
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,706
01.08.2023, 14:51
zayats80888, а это точная инфа, что нет такого термина "двумерный массив"? Я просто сам не проверял. Знаю, что в стандарте есть термин "массив" и даже "массив символов". В любом случае, не припомню, чтобы в стандарте под массивом воспринимали так же контейнеры vector, array и т.д., а под массивом символов - string.

Добавлено через 3 минуты
zayats80888, на счёт того, можно ли так называть, то "можно" понятие растяжимое. В широком смысле "можно" (которое равносильно "а кто мне запретит"), можно даже матрицей называть.
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 8,999
01.08.2023, 14:58
Цитата Сообщение от Royal_X Посмотреть сообщение
а это точная инфа, что нет такого термина "двумерный массив"?
Именно как термина - нет. Но сам термин встречается в "сносках и пояснениях", которые не являются частью текста стандарта, для наглядности.
2
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.08.2023, 15:10
Ну вот, а мою мапу никто массивом не называет.
Пляхие вы.

Добавлено через 2 минуты
Потому к слову массив в контексте описывают что они подразумевают.
А к другим конструкциям, похожим на массив, добавляются семантические слова.
Динамический массив, ассоциативный массив, разреженный массив.
Но семантика слова "массив" - одна, и в ЯП С++ "массыв" и его значение, конструкция, так же одна.
А те кто начинают далеко философствовать, идут гулять в темноте.

Добавлено через 3 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Я вообще х.з., зачем в обсуждении все ударились в детали языка.
Вопрос ТС носит чисто философский характер.
Тут я не соглашусь.
ТС не спрашивал, можно "это" (приведенное ТС в коде) рассматривать как двумерный массив.
ТС не спрашивал, имеет ли "это" поведение как у вдумерного массива.
Он спросил четко и ясно. Щас бы пришел hoggy, он бы развел такую софистику, мама не горюй.
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 8,999
01.08.2023, 15:15

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
а мою мапу никто массивом не называет.
Ну хош я назову "разреженным массивом", полегчает? :)



Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Он спросил четко и ясно.
Про это:
Цитата Сообщение от Ruzalki Посмотреть сообщение
это будет считаться двухмерным массивом?
И ответ не связан с языком С++.

А вот к этому утверждению
Цитата Сообщение от Ruzalki Посмотреть сообщение
тип данных string - это массив состоящий из типа данных char
вполне законно уже прикопались.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.08.2023, 15:25
Я же явно написал в первом ответе, основную характеристику массива в контексте С++.
Не в контексте задачи, обсуждения в кругу друзей и прочего.
А именно сама ветка и задает этот контекст (С++).
Если оговорен вопрос иначе, тогда да, можно немного и переключится, и то если он все же как то связан с С++.

Я же явно написал в первом ответе, основную характеристику массива в контексте С++.
Это его целостность, все его элементы находятся в одной области памяти.
Ни один из представленных "массивов" такой особенностью не обладают.
(string [5], int** 2darrБ моя мапа и т.д. )
Такое поведение можно симулировать. Но симулировать можно все.

Так о чем мы тут говорим ?
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 8,999
01.08.2023, 15:29
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ни один из представленных "массивов" такой особенностью не обладают.
(string [5], int** 2darrБ моя мапа и т.д. )
Первое по определению - массив и "все его элементы находятся в одной области памяти"
Цитата Сообщение от SmallEvil Посмотреть сообщение
Так о чем мы тут говорим ?
Кому о чем нравится, тема располагает, видимо...
2
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
01.08.2023, 22:27
Цитата Сообщение от zayats80888 Посмотреть сообщение
В языке C++ нет термина "двумерный массив", поэтому так можно назвать всё, что душе угодно, не докопаешься.
Нет, не все что угодно.
Словосочетание "двумерный массив" явно определяет контекст: речь о массиве, причем двумерном.

А теперь смотрите определение термина "массив" в стандарте, и читаете о его размерностях.
Из определение термина "массив" неизбежно вытекает определение двумерного массива: двумерный массив - это тип данных "массив", элементы которого являются одномерными массивами.

Ничем другим двумерный массив быть не может:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <type_traits>
 
int main()
{
    int a[2][3];
    
    using reference_t = decltype(a[0]);
    using element_t = std::remove_reference_t<reference_t>;
    
    static_assert(
        std::is_same_v<int[3], element_t>, 
        "two-dimensional array is an array of arrays"
    );
    (void) a;
}
1
01.08.2023, 22:34

Не по теме:

Цитата Сообщение от eva2326 Посмотреть сообщение
Из определение термина "массив" неизбежно вытекает определение двумерного массива
Может и вытекает, но я сколько стандарт не выжимал - не вытек...
У меня из определения термина массив неизбежно вытекает определение розового единорога, но как именно, я рассказывать не буду, а то еще за шизика сочтете.

0
01.08.2023, 22:41

Не по теме:

zayats80888, не сочтём. В одной палате веселее)

0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
01.08.2023, 23:32
eva2326,
А чё это вы написали?
Ни чё не понял...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2023, 23:32

Работа с двухмерными массивами
Есть задание заменить каждый элемент столюца массива произведением последующих элементов этого столбца. может ктото подскажет как это...

Работа с двухмерными массивами
Дана матрица вещественных чисел размером N на M. Вычислить произведение отрицательных элементов последнего столбца.

Работа с двухмерными массивами
Дана матрица. Нужно сделать так, что бы столбцы расставились в порядке убывания первых элементов import numpy as np ...

Работа с двухмерными массивами
Привет всем. Помогите пожалуйста. Нужно в двухмерном массиве 10х10 переставить столбцы в порядке увеличения количества элеменов=0 в...

Работа с двухмерными массивами
Даны три задания: 1) Дано матрицу размером 5 x 10. В каждом столбце найти количество элементов, больших среднего арифметического всех...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru