Что вам, вероятно, нужно:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
int size = 0;
std::cin >> size;
for(int i = 0; i < size; i++){
int number = 0;
std::cin >> number;
vec.push_back(number);
}
for(int i : vec){
std::cout << i << " ";
}
}
std::vector<int>
- это класс, разработанный для предоставления интерфейса к массиву с изменяемыми размерами.Функция push_back()
добавляет вектор с заданным аргументом.
Последний цикл, который называется на основе ранжирования for()
, используется для печати всех элементов вектора.Вы можете заменить его простым старым циклом for()
с индексированием, поскольку std::vector
поддерживает operator []
, но если подход на основе диапазона достаточен, его следует предпочесть.
РЕДАКТИРОВАТЬ: я не знаюJavaScript, но я предполагаю (из вашего примера), что переменные, объявленные внутри циклов , видны везде.Это не так в C++
.Видимость переменных зависит от области, в которой они объявлены. Если вы хотите, чтобы ваш список / массив / вектор / любой другой контейнер был виден этим двум for()
циклам, вы должны объявить его outside them - как в моем примере выше.
EDIT2: Хотя вы почти всегда должны использовать std::vector
для таких задач, можно утверждать, что они хотят отключить изменение размера контейнера.В этом случае нам остается простое динамическое распределение.Мы обращаемся к библиотеке <memory>
, поскольку нам не нужно управлять ею самим:
#include <iostream>
#include <memory>
int main() {
int size = 0;
std::cin >> size;
auto arr = std::make_unique<int[]>(size);
for(int i = 0; i < size; i++){
int number = 0;
std::cin >> number;
arr[i] = number;
}
for(int i = 0; i < size; i++){
std::cout << arr[i] << " ";
}
}
Для auto
, либо прочитайте здесь , либо представьте, что это просто магический тип, который( почти всегда ) правильно.Это похоже на var
в Python или JavaScript (но позже его тип не может быть изменен).
Для std::unique_ptr<T[]>
, либо прочитайте здесь , либо представьте, что это просто динамически распределенный массив, которыйавтоматически delete[]
s сам.Если вы еще не узнали о динамическом распределении, просто проигнорируйте, что это значит, и подождите, пока оно не будет введено.
Обратите внимание, что мы также избавились от цикла for()
на основе диапазона *1048*.К сожалению, он не работает с простыми динамически размещаемыми массивами.