С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Эксперт функциональных языков программированияЭксперт С++
4182 / 2032 / 961
Регистрация: 01.06.2021
Сообщений: 7,133
Записей в блоге: 7
1

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

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

Author24 — интернет-сервис помощи студентам
Рассмотрим такой код:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2021, 10:35
Ответы с готовыми решениями:

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

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

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

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

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

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

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

В целом, все достаточно просто: выражение приводит ли к значению времени компиляции, или не приводит. Если не приводит, значит использовать его в качестве размера массива в С++ нельзя. Независимо от того, что именно допускают отдельные компиляторы.
0
Вездепух
Эксперт CЭксперт С++
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
12.09.2021, 18:46 22
Цитата Сообщение от 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
Эксперт функциональных языков программированияЭксперт С++
4182 / 2032 / 961
Регистрация: 01.06.2021
Сообщений: 7,133
Записей в блоге: 7
12.09.2021, 21:22  [ТС] 23
Цитата Сообщение от XLAT Посмотреть сообщение
ну, вы сами решили что визуал коде это самое лучшее иде,
хотя вам писали, что оно глючное неудобное гуано.
Я не писал, что VS Code самое лучшее иде. И вообще, VS Code это не IDE, а текстовый редактор. Да, там есть расширения, которые дает ему частичную функциональность IDE (возможность компиляции, отладки и т.д.), но VS Code это редактор.
А я писал, что тот код не работает в IDE Visual Studio на компиляторе MSVC.
Если VS Code это гуано, то Visual Studio это гуано в квадрате, созданное для индусов-генераторов мелкософта.
Более того, VS Code очень даже популярен среди программистов (см. статистику в инете), ибо это прога с открытым исходным кодом, а не проприетарное гуано как Visual Studio.
1
TheCalligrapher
12.09.2021, 21:29
  #24

Не по теме:

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

0
Just Do It!
4028 / 2422 / 640
Регистрация: 23.09.2014
Сообщений: 7,806
Записей в блоге: 2
13.09.2021, 06:34 25
Цитата Сообщение от 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
Эксперт функциональных языков программированияЭксперт С++
4182 / 2032 / 961
Регистрация: 01.06.2021
Сообщений: 7,133
Записей в блоге: 7
13.09.2021, 09:08  [ТС] 26
Цитата Сообщение от 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!
4028 / 2422 / 640
Регистрация: 23.09.2014
Сообщений: 7,806
Записей в блоге: 2
13.09.2021, 09:21 27
Цитата Сообщение от Royal_X Посмотреть сообщение
VS Code
я приплёл это редактор к вопросу, почему у вас не компилится:
C++
1
2
const int n = 10;
int a[n];
можно предположить какой-нить маловероятный эксцесс, например, что VC вставляет туда символы из "китайской" кодировки...
остальные предположения также из такого ряда ...

Цитата Сообщение от Royal_X Посмотреть сообщение
он есть и почти всегда в топе.
обратите внимание, что большие проекты пишут только < 0.0001% всех пишущих,
т.е. те кто юзает VC им будет достаточно и дефолтного блокнота - разницу они даже и не заметят...
0
Эксперт функциональных языков программированияЭксперт С++
4182 / 2032 / 961
Регистрация: 01.06.2021
Сообщений: 7,133
Записей в блоге: 7
13.09.2021, 09:26  [ТС] 28
XLAT, плохо, что у меня сейчас нет установленного Visual Studio, чтобы воспроизвести проблему и понять причину ошибки. В настоящее время я использую VS Code (с расширением С++) вместе с GCC - с ними у меня проблем еще не было.
0
Just Do It!
4028 / 2422 / 640
Регистрация: 23.09.2014
Сообщений: 7,806
Записей в блоге: 2
13.09.2021, 09:29 29
Цитата Сообщение от Royal_X Посмотреть сообщение
плохо, что у меня сейчас нет установленного Visual Studio
о май год,
да поставьте же C::B, делов ровно 5 минут от ссылки на скачку до первой консольного окна вашей проги на экране, при этом попивая кофеёк...
0
Эксперт функциональных языков программированияЭксперт С++
4182 / 2032 / 961
Регистрация: 01.06.2021
Сообщений: 7,133
Записей в блоге: 7
13.09.2021, 09:31  [ТС] 30
Цитата Сообщение от XLAT Посмотреть сообщение
да поставьте же C::B
он уже давно стоит)
1
13.09.2021, 09:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2021, 09:31
Помогаю со студенческими работами здесь

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

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

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

Немного о PR
То что алгоритм расчета PR в корне отличается от алгоритма расчета ИЦ, не для кого наверное не...

последовательности в массивах
Даны натуральные числа m и n, последовательности целых чисел a1 a2...am и b1 b2...bm В каждой...

Записи в массивах
Здравствуйте! Разрабатываю по-маленьку программу, которая будет разбивать любой полигон на...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru