Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601

Немного о массивах

12.09.2021, 10:35. Показов 3120. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рассмотрим такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <array>
#include <vector>
 
using namespace std;
 
int main()
{
   int arr1[10];
 
   array<int, 10> arr2;
 
   int* arr3 = new int[10];
 
   vector<int> arr4;
   arr4.reserve(10);
 
   // ...
   
   delete[] arr3;
}
Пожалуйста, прочтите выводы внизу и при необходимости исправьте меня. Хочу удостовериться, что понимаю все правильно.

Создал 4 массива разными способами.

arr1 будет статическим массивом. Для него на протяжение всей программы выделяется память для 10 элементов, которая больше не меняется. В такой массив мы не можем добавить новые элементы. Такой массив не может возвращаться через функцию. Но arr1 будет самым быстрым из всех массивов.

arr2 также является статическим массивом, но создан через контейнер <array>. Фактически тоже самое, что и arr1, только имеет несколько преимуществ: мы можем использовать готовые функции из <array>.

arr3 является динамическим массивом, для которого изначально выделяется память для 10 элементов. Динамические массивы могут возвращаться функциями.

arr4 тоже является динамическим массивом, но создан через контейнер <vector>, который имеет много преимуществ: более безопасное управление памятью и возможность использования готовых функций из <vector>.

Еще я не понимаю один момент. В динамический массив, по идее, мы можем добавлять элементы за пределами выделенного раздела, либо увеличить размер выделенной памяти, а потом добавить новый элемент (как понимаю, в этом и все отличие динамического массива от статического). Вот только, если для arr4 мы можем использовать функции push_back(), pop_back(), reserve(), shrink_to_fit(), size() и т.д., то как мы можем добавить новые элементы в arr3? И как мы можем узнать количество элементов в arr3?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2021, 10:35
Ответы с готовыми решениями:

В массивах G(8), K(19) определить кол-во и произведение элементов меньших 26 в двух заданных массивах (6;34)
Задать два одномерных массива значений, чтобы величины элементов массивов попадали в заданный интервал на всем его диапазоне ( значения...

В отсортированных массивах найти количество совпадений, т.е. чисел в двух массивах с одинаковым индексом/
Добрый день! Помоги пожалуйста решить задачу. Сделать два массива из 7-ми цифр, заполненных случайными цифрами (от 0 до 9). ...

В наушник попало немного воды и он стал немного тише играть
В наушник попало немного воды и он стал немного тише играть. Это практически не заметно, но всё же раздражает. Так это пройдет со временем...

29
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
12.09.2021, 18:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от jugu Посмотреть сообщение
Всё зависит от того, как определена сущность foo.
Это верно. Но я, естественно, имел в виду случай, когда foo - это не constexpr функция выполняющаяся в compile-time контексте (все мы знаем, что сам по себе constexpr не гарантирует этого).

Цитата Сообщение от jugu Посмотреть сообщение
gcc даже допускает
Цитата Сообщение от jugu Посмотреть сообщение
Некоторые компиляторы первый вариант пропускают, а второй - нет.
А вот это к делу не относится. Т.к. речь идет о языке, а не о расширениях компилятора.

В целом, все достаточно просто: выражение приводит ли к значению времени компиляции, или не приводит. Если не приводит, значит использовать его в качестве размера массива в С++ нельзя. Независимо от того, что именно допускают отдельные компиляторы.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,316
12.09.2021, 18:46
Цитата Сообщение от Royal_X Посмотреть сообщение
Как раз я говорю про const int. Я знаю, что даже в учебных материалах советуют так писать. Но у меня так не вышло с MSVC.
Это потому что вы опять создали тему в форуме по С++, а рассказываете вы нем байки про какие-то туманные полузабытые эксперименты с языком С. С и С++ - разные языки. Если компилятор С не поддерживает VLA, то такой код

C
1
2
const int n = 10;
int a[n];
в нем компилироваться не будет, потому что в С это VLA. Ничего удивительного в этом нет.

Цитата Сообщение от DrOffset Посмотреть сообщение
Для констант времени компиляции - используются правила языка С++ и создается обычный массив, а для константной переменной используются правила языка С99 и создается VLA-массив.
Справедливости ради надо заметить, что даже в тех компиляторах С++, которые разрешают массивы неконстантного размера в качестве расширения, получившаяся сущность ведет себя не так, как ведут себя VLA в С. То есть в С++ это никакой не "VLA", в совершенно иной продукт фантазии авторов конкретного компилятора С++, лишь внешне напоминающий VLA. Я пока что не видел ни одного компилятора С++, который бы поддерживал VLA в соответствии с С-шной спецификацией.
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.09.2021, 21:22  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
ну, вы сами решили что визуал коде это самое лучшее иде,
хотя вам писали, что оно глючное неудобное гуано.
Я не писал, что VS Code самое лучшее иде. И вообще, VS Code это не IDE, а текстовый редактор. Да, там есть расширения, которые дает ему частичную функциональность IDE (возможность компиляции, отладки и т.д.), но VS Code это редактор.
А я писал, что тот код не работает в IDE Visual Studio на компиляторе MSVC.
Если VS Code это гуано, то Visual Studio это гуано в квадрате, созданное для индусов-генераторов мелкософта.
Более того, VS Code очень даже популярен среди программистов (см. статистику в инете), ибо это прога с открытым исходным кодом, а не проприетарное гуано как Visual Studio.
1
12.09.2021, 21:29

Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
ну, вы сами решили что визуал коде это самое лучшее иде,
хотя вам писали, что оно глючное неудобное гуано.
Цитата Сообщение от Royal_X Посмотреть сообщение
Если VS Code это гуано, то Visual Studio это гуано в квадрате, созданное для индусов-генераторов мелкософта.
Что за поток дикого пионэрского бреда сразу из двух генераторов этого бреда? Вы форумом часом не ошиблись?

0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
13.09.2021, 06:34
Цитата Сообщение от Royal_X Посмотреть сообщение
И вообще, VS Code это не IDE, а текстовый редактор
любой текстовый редактор после того, как вы в него интегрируете компилятор + тулзы
превращается в иде. В случае с VSC имеем некий конструктор "СДЕЛАЙ САМ".
Поэтому уже изначально это гуано, потому что это будет выглядеть как "Я ТУТ СДЕЛАЛ ВСЁ ДЛЯ СЭБА"
и если вы аутичный красноглазый брейнфакер с нечёткими приоритетами,
то скорее всего вся ваша интеграция не будет интуитивно понятна больше никому, кроме вас самих.
Потом, а что там с переносимостью этого "текстового редактора",
в случае если вам нужно быстро его развернуть на другом компе, чтобы сделать правку на пару минут?

Цитата Сообщение от Royal_X Посмотреть сообщение
Visual Studio это гуано в квадрате
зато стандартно из коробки и без брейнфакерства.
пока вы пишите маленькие одно(мало)файловые демки/тесты, то пофиг какое иде, ни, или почти пофиг.

Цитата Сообщение от Royal_X Посмотреть сообщение
VS Code очень даже популярен среди программистов
даже в перечне нет:
Какую IDE Вы предпочитаете и почему?
другой вариант это Vim, Geany, ... (бегло пробежал несколько страниц комментов).

Цитата Сообщение от Royal_X Посмотреть сообщение
VS Code очень даже популярен среди программистов
я сам с ним возился - было интересно, но когда приспичило написать демку, то сразу ушёл на C::B/MSVS
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
13.09.2021, 09:08  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
я сам с ним возился - было интересно
а вы попробуйте настроить VS Code для работы с C# + Unity - вот там уже брейнфакерство...

Добавлено через 10 минут
Цитата Сообщение от XLAT Посмотреть сообщение
даже в перечне нет:
я просто пишу в гугле "Best C++ IDEs in 2021" и смотрю разные перечни. В каких-то перечнях его и вправду нет, но во многих он есть и почти всегда в топе.

Добавлено через 3 минуты
Даже по статистике JetBrains в топе VS Code, а не их IDE - CLion
https://www.jetbrains.com/lp/d... -2021/cpp/
Посмотрите раздел "Which IDE / editor do you use the most for C++ development?"
1
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
13.09.2021, 09:21
Цитата Сообщение от Royal_X Посмотреть сообщение
VS Code
я приплёл это редактор к вопросу, почему у вас не компилится:
C++
1
2
const int n = 10;
int a[n];
можно предположить какой-нить маловероятный эксцесс, например, что VC вставляет туда символы из "китайской" кодировки...
остальные предположения также из такого ряда ...

Цитата Сообщение от Royal_X Посмотреть сообщение
он есть и почти всегда в топе.
обратите внимание, что большие проекты пишут только < 0.0001% всех пишущих,
т.е. те кто юзает VC им будет достаточно и дефолтного блокнота - разницу они даже и не заметят...
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
13.09.2021, 09:26  [ТС]
XLAT, плохо, что у меня сейчас нет установленного Visual Studio, чтобы воспроизвести проблему и понять причину ошибки. В настоящее время я использую VS Code (с расширением С++) вместе с GCC - с ними у меня проблем еще не было.
0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
13.09.2021, 09:29
Цитата Сообщение от Royal_X Посмотреть сообщение
плохо, что у меня сейчас нет установленного Visual Studio
о май год,
да поставьте же C::B, делов ровно 5 минут от ссылки на скачку до первой консольного окна вашей проги на экране, при этом попивая кофеёк...
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
13.09.2021, 09:31  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
да поставьте же C::B
он уже давно стоит)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2021, 09:31

Как пользоваться квадратными скобками в массивах массивах?
Вот сам пример, но мне нужны только некоторые части. int numbers = { -4, -3, -2, -1,0, 1, 2, 3, 4 }; int n...

Теоретически о массивах и массивах процедур
У меня возник вопрос, параллельно, на будущее. Допустим программа работает с множеством массивов, в один и тот-же массив изменения могут...

Изменить немного совсем немного.
Создать динамическую структуру – бинарное дерево для выполнения указанного ниже задания. Список студентов имеет следующие параметры: ...

each() в массивах.
Написал упражнение $prices=array('Резина'=&gt; 100, 'Машинное масло'=&gt; 10, 'Свечи зажигания'=&gt; 4); while($element=each($prices)); ...

В массивах MI (I O) M2 (8) и M3 (5)
В массивах MI (I O) M2 (8) и M3 (5).элементы представлены 5-ти символьными словами,осуществить выборку тех из них,которые содержат 2 и...


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

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

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru