Массивы в C++: главные моменты и особенности
Всем привет! В данном уроке мы рассмотрим чрезвычайно популярную структуру хранения данных — массивы. Массивы вы можете встретить в любом языке программирования, поскольку без них хранение данных было бы очень тяжелой задачей. Давай начнем!
Что такое массив?
Массив — это набор однотипных данных. Например, вы можете хранить все носки в одном месте. Для этого вы используете полку. В C++ множество элементов хранятся в массивах.
Для лучшего понимания давайте рассмотрим следующею картинку:
По ней мы можем понять следующее:
- Каждый массив должен иметь свое название.
- Он может в себе содержать от одного элемента до бесконечности (это в теории, на практике размер массива ограничивается памятью компьютера).
- Все элементы должны быть одного типа. Так, например, вы не можете в одном массиве хранить переменные типа
int
и типаdouble
.
Теперь, когда вы понимаете концепцию массива, мы можем перейти к его реализацией на С++.
Используем массивы в C++
В C++ с массивами довольно легко работать (поскольку массивы содержат много однотипных значений, для их обработки удобно использовать цикл for). Давайте научимся это делать с объявления массива.
Инициализация массива
Для того чтобы использовать массивы в своих программах, его надо сначала объявить. Для этого нужно использовать следующею конструкцию:
1 |
<тип> <имя массива> [ <кол-во элементов > ]; |
Например:
1 |
int arr[50]; |
Этим кодом мы создали массив типа int
с именем arr
в котором может храниться до 50-ти элементов.
Также можно использовать и другие типы:
1 |
float myTestArrayForLesson[10 * 1000 + 1]; |
Данный код также абсолютно корректен. Давайте также рассмотрим способ указания значения элементам массива при его инициализации:
1 2 3 |
int arr[] = {0, 1, 2, 3, 4, 5}; // массив будет иметь 6 элементов (от 0 до 5) int mas[100] = {0}; // все 100 элементов будут иметь значение 0 |
Как видите, для того, чтобы задать значения, нужно сразу после объявления массива указать через равно в фигурных скобках требуемые значения.
Теперь давайте разберемся в том, как же нам в своих программах использовать данные в массиве.
Обращение к элементам массива
Очень важный момент! В C++ нумерация элементов массива идет с нуля. Таким образом второй элемент будет иметь индекс 1, а десятый — 9. к сожалению, многие новички забывают про это.
Вообще, есть возможность работать без нулевого элемента. Для этого в программе придется всегда следить за нужной нумерацией элементов в массиве. Так, например, вы не сможете задавать различные значение элементов по порядку (как мы это сделали вверху). Для этого вам придется для нулевого элемента указывать, например, -1.
Для начала, давайте научимся присваивать элементам массива требуемые нам значения. Для этого достаточно указать имя массива и номер требуемого элемента, а затем после знака равенства указать присваиваемое значение:
1 |
arr[6] = 7 * 4; // arr[6] равен 28 |
Для обращения к элементу массива в C++ мы должны использовать следующею конструкцию:
1 |
<любой код> <имя массива> [ <№ элемента> ] <любой код> |
Это может выглядеть следующим образом:
1 |
cout << arr[10] << ", " << arr[11] << endl; |
Таким образом мы выводим на экран значения одиннадцатого и двенадцатого элементов.
Двухмерные массивы
Очень часто при решении практических задач возникает потребность в использовании таблиц, матриц и т. д. В таком случае нам может пригодится отличная модификации массива — двухмерные (и более) массивы. Для этого нам просто нужно объявить массив массивов. Делается это следующим образом:
1 |
int arr[100][50] = {0}; // двухмерный массив |
Этим кодом мы создали матрицу размером 100×50, которая изначально заполнена нулями. Ее использование ничуть не отличается от выше рассмотренных обычных массивов:
1 2 3 4 5 6 7 8 9 |
int matrix[100][100] = {0}; matrix[5][10] = 11; matrix[10][5] = 1; cout << "Interesting values:\n"; cout << matrix[0][0] << ", " << matrix[5][10] << ", " << matrix[10][5] << endl; |
Если мы выполним такой код (предварительно обернув его в функцию main), то увидим следующее:
Как видите работать с двухмерными массивами также просто как и с их одномерными аналогами. Теперь давайте напишем простенькую программу, которая будет использовать массивы.
Пример
А реализовывать мы будем хранилище данных. Изначально оно будет пустое (содержать нули). Пользователь сможет записывать в нее значения и извлекать при необходимости (пользователь будет указывать номер дома и квартиры человека, а хранить мы будем его возраст).
Вот код данной программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <iostream> #include <stdlib.h> using namespace std; int main() { int data[500][500] = {0}; // массив string type; // тип запроса int x, y, val; while (true) { // бесконечный цикл cin >> type; // узнаем тип запроса if (type == "End") { // если End, то завершаем работу break; } else if (type == "Insert") { // вставка cin >> x >> y >> val; data[x][y] = val; } else if (type == "Delete") { // удаление cin >> x >> y; data[x][y] = 0; } else if (type == "Get") { // получение значения cin >> x >> y; cout << data[x][y] << endl; } else { // что-то пошло не так cout << "Error! Let's try again." << endl; } } cout << "\nOk. Good work." << endl; return 0; } |
Вот пример работы данной программы:
Здесь были использованы двухмерные массивы в C++ для хранения данных. Если вы что-то не поняли, то можете оставить свой вопрос в комментариях (мы оперативно отвечаем:-) ).
Чтобы вы лучше усвоили урок, расширьте функционал данной программы следующим образом:
- Добавьте возможность узнать, живет ли в данной квартире кто-нибудь или нет (подсказка: заведите массив типа bool).
- Установите ограничения на x и y. Сейчас программа не будет работать при
x >= 500
. Для решения этой проблемы выводите пользователю сообщение при попытке добавить элемент с некорректными значениями x или y.
Тест на тему «Массивы». Проверь себя!
Если эта надпись не исчезает долгое время, попробуйте обновить страницу. Этот тест использует javascript. Пожалуйста, влкючите javascript в вашем браузере.
Если вы хотите отблагодарить автора за проделанную работу, то поделитесь данной информацией с помощью кнопок ниже.
Спасибо за внимание!
Код представленный в последнем примере не работает в Visual Studio 2012! [error C2678]
——
В начале кода нужно подключить еще один модуль!
#include
Комментарий не дает написать это правильно, но тут нужен модуль «string»
Это связано с тем, что у вас установлен другой компилятор.
Обязательно для массива использовать элемент «#include «. Просто я не дошёл до изучения такой темы, как библиотеки, а программу с массивами написать надо.
stdlib.h
Почему-то это не написалось
Необязательно, но если будет проблема с подключением библиотек можете подключить сразу все — #include.
можете написать в примере цикла for с массивом пароль программы ?
Весь код писать сюда не буду, но вот как будет выглядеть условие цикла — for (int i = 0; i < n; i++). n - это количество паролей (столько у нас будет итераций).
А как вывести на экран саму матрицу, а не элемент матрицы?
Выведите ее через двойной цикл for или while, в зависимости что вы предпочитаете. Лично я бы оперировал for.
Всем здравствуйте! Можете помочь в выполнении такого задания, в программировании не силен, а сделать нужно.
Задание:Массив A = (15, 9, –6, 12, –9, 18, 0) преобразован к виду A = (5, 3, 0, 4, 0, 6, 0). Размер массива A — 20 элементов из диапазона [–25,25]. Вычислить сумму четных элементов преобразованного массива.
Моя попытка написать код:
#include
using namespace std;
int A[]= {5,3,1,4,0,6,0};
int sumEl;
int main(int argc, const char * argv[]) {
for (int i =0; i < sizeof(A) / sizeof(int); i++) {
if (i%2 == 0) {
sumEl+=A[i];
}
}
std::cout << sumEl <<std::endl;
return 0;
}
Вам нужно использовать в условии i % 2 == 1, потому что индексация начинается с 0.
#include
using namespace std;
int A[]= {5,3,1,4,0,6,0};
int sumEl;
int main(int argc, const char * argv[]) {
for (int i =0; i < sizeof(A) / sizeof(int); i++) { if (i%2 == 1) { sumEl+=A[i]; } } cout << sumEl <
.Дан массив целых чисел из 15 элементов. Найти произведение положительных элементов массива