Массивы и строки (std::string) в C++
Массивы и строки в C++: статические массивы, перебор, std::string и основные операции со строками.
Массив — набор элементов одного типа, расположенных подряд в памяти. std::string — удобный класс для работы с текстом.
Статический массив
Размер задаётся при объявлении и не меняется. Индексация с нуля.
#include <iostream>
int main() {
int nums[5] = {10, 20, 30, 40, 50};
std::cout << nums[0] << "\n"; // 10 — первый элемент
std::cout << nums[4] << "\n"; // 50 — последний
nums[2] = 99; // изменяем третий элемент
std::cout << nums[2] << "\n"; // 99
return 0;
}
Вывод:
10 50 99
Выход за границы массива (
nums[5]при размере 5) — неопределённое поведение: программа может упасть или молча испортить данные. Это классическая ловушка C++.
Перебор массива
#include <iostream>
int main() {
int scores[4] = {85, 92, 78, 96};
int sum = 0;
for (int i = 0; i < 4; i++) {
sum += scores[i];
}
std::cout << "Сумма: " << sum << "\n";
std::cout << "Среднее: " << sum / 4.0 << "\n";
return 0;
}
Вывод:
Сумма: 351 Среднее: 87.75
Современный C++ предлагает range-based for — компактнее и безопаснее:
int arr[] = {1, 2, 3, 4, 5};
for (int x : arr) {
std::cout << x << " ";
}
// Вывод: 1 2 3 4 5
std::string — строки в C++
std::string из заголовка <string> намного удобнее, чем массивы символов в стиле C.
#include <iostream>
#include <string>
int main() {
std::string s = "Привет";
s += ", мир!"; // конкатенация через +=
std::cout << s << "\n";
std::cout << s.length() << "\n"; // длина строки
std::cout << s[0] << "\n"; // первый символ
std::cout << s.substr(0, 6) << "\n"; // подстрока
return 0;
}
Вывод:
Привет, мир! 12 П Привет
Основные методы std::string
Метод | Действие |
| длина строки |
| подстрока |
| позиция подстроки (или |
| пустая ли строка |
| добавить в конец |
Коротко
- Массив — фиксированный набор элементов одного типа; индексация с нуля.
- Выход за границы — неопределённое поведение: всегда проверяйте индекс.
- Range-based for (
for (int x : arr)) — современный способ перебора. std::stringлучшеchar[]: безопаснее, богаче методами, понятнее.
Проверьте себя
1. С какого индекса начинается массив в C++?
A1
B0
C-1
DЗависит от типа
2. Что произойдёт при обращении к arr[10] для массива размером 5?
AВернётся 0
BПрограмма выведет ошибку и продолжит работу
CНеопределённое поведение — программа может упасть или испортить данные
DКомпилятор не допустит такой код
3. Какой метод std::string возвращает длину строки?
Alen()
Bsize() или length()
Ccount()
Dwidth()