Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Дано количество чисел - n. После этого через пробел вводятся эти n чисел. Их надо записать в массив. с++

ахахахах ахахахах Мастер (2174), открыт 2 недели назад
Я нашёл решение с помощью вектора, но у меня вопрос: как оно работает? Что значит (auto& v : arr), и почему мы берём ссылку на несуществующую переменную? Как так получается, что числа вводятся именно через пробел?
 int n; 

cin >> n;

vector<int> arr(n);
for (auto& v : arr) { cin >> v; }
2 ответа
Андрей Высший разум (474781) 2 недели назад
Конструкция for (auto& v : arr) означает, что на каждой итерации цикла переменная v будет являться ссылкой на очередной элемент вектора arr: на первой итерации v - ссылка на arr[0], на второй итерации - на arr[1] и т.д. - пока не будут обработаны все элементы arr.

Тут нет никакой "несуществующей переменной", т.к. auto (и не только в заголовке цикла for) - это и есть создание переменной с автоматическим выводом её типа (тип переменной определяется типом инициализирующего переменную значения). Точно так же можно было написать:
 for (int &v : arr) 

Числа вводятся не "через пробел", а через любое кол-во пробельных символов: пробелов, табуляций, переводов строк и т.д. Детали работы ввода определяются стандартом C++.

Такая схема ввода чисел (не строк) используется во множестве языков программирования. Но она же создаёт проблемы, когда вперемешку вводятся числа и строки.
ахахахах ахахахахМастер (2174) 2 недели назад
спасибо, кстати это решение как раз ваше
ахахахах ахахахахМастер (2174) 2 недели назад
а если я хочу, чтобы каждый следующий элемент массива равнялся прошлому+v, как записать это условие?
Андрей Высший разум (474781) ахахахах ахахахах, ИМХО, вполне нормальное решение. Я бы записал его так:
 int t = 0;
for (int &v : arr) {
  cin >> v;
  v += t;
  t = v;
} 
, но это дело вкуса.
ахахахах ахахахахМастер (2174) 2 недели назад
у меня, кажется, получилось:
 vector<int> arr(n); 
for (int& v : arr ) {
int i;
cin >> i;
v = h + i;
h = v;
}
правильно?
ахахахах ахахахахМастер (2174) 2 недели назад
h изначально = 0
Похожие вопросы