C/C++

Задание массива в С++ с переменным количеством элементов

Здравствуйте! Мне нужно в С++ объявить массив с N элементов ( N будет введено перед этим ). Тимофей Хирьянов во время лекции ( https://www.youtube.com/watch?v=mgaOUpeh96M&t=16s ) дал понять, что существуют компиляторы, которые позволят объявить массив в С++ с количеством элементов, которое будет введено. Скажите, пожалуйста, о каких компиляторах идёт речь? Visual Studio не позволяет мне осуществить это.
Пользуйтесь во благо...

#include <iostream>
#include <vector>
using namespace std;
int main() {
system("chcp 1251 > nul");
cout << "Введите размер массива: ";
int n;
cin >> n;
auto box = new(nothrow) int[n];
if (box != nullptr) {
for (auto i = 0; i < n; ++i) box[i] = i + 1;
for (auto i = 0; i < n; ++i) cout << box[i] << ' ';
puts("");
delete[] box;
box = nullptr;
}
cout << "Введите размер вектора: ";
cin >> n;
vector<int> vec(n);
for (auto i = 0; i < n; ++i) vec[i] = i + 1;
for (auto i = 0; i < n; ++i) cout << vec[i] << ' ';
puts("");
system("pause > nul");
}
AG
Alexei Gudumac
89 878
Лучший ответ
Вообще-то в C++ полагается использовать не массив, а класс vector, который фактически как раз такой массив с многими полезными дополнительными свойствами. Но можно использовать и динамические массивы, о которых написали выше.
Но есть компиляторы, которые позволяют использовать и массивы VLA (variable length array), длина которых может задаваться переменной в стиле int a[n]. Массивы VLA имеются в С, но в стандарт C++ не входят, однако некоторыми компиляторами C++, например, gcc, поддерживаются.
Abbas Yusupov
Abbas Yusupov
64 579
Владимир Головня О чём и твержу-с :)
Хирьянов знает C/C++, как я знаю биографию Деда Мороза, то есть никак:)
Есть два понятия-синонима к твоему массиву:
Динамический массив (так в Паскале и ещё где-то зовётся) и Вектор в C/C++. Через макросы подставлять размер массива - лажа несерьёзная.
Если пишешь код в C++, то используй vector.
Если пишешь код в C, то используй динамическое создание и изменение размера массива в куче через функции malloc и realloc.
Сергей Чернов
Сергей Чернов
37 945
Иван Старостин Он, кажется, уточняет в начале лекции, что учит АиСД, а не языку С++ :)
Сергей Чернов О, не то кинул, ща последний скрин
книжки почитайте, нпример
Читать онлайн "C++: базовый курс" автора Шилдт Герберт

cout << "Необходимо элементов массива: ";
cin >> kol_elem;
int *arr = new int[kol_elem];
Макс Червяков
Макс Червяков
1 375
Сергей Чернов Ну, попробуй своим способом на андроиде или на компе создать массив, например, размером 200 млн. или 2 млрд. элементов типа int :)
А потом пробуй создать тот же размер массива, но так:
#include
#include
....
int* p=NULL;
p=(int*)malloc(sizeof(int)*sizeof(kol_elem));
p[0]=200;//для примера работы
free(p);

Твой вариант массива грохнется гораздо раньше, фуфло потому что
Сергей Чернов #include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main()
{
int kol_elem;
int variant;
cout<<"Вариант массива (1 или 2): ";
cin>>variant;cout << "Количество элементов массива: ";
cin >> kol_elem;
if(variant==1)
{ int *arr = new int[kol_elem]; arr[0]=200;cout<<"\m массив создан";
delete arr;};
if(variant==2)
{
int* p=NULL;
p=(int*)malloc(sizeof(int)*sizeof(kol_elem));
p[0]=200;printf("\n %s","массивсоздан");
};
return 0;
}

Похожие вопросы