Массивы — фундаментальные структуры данных C++. Разбираем эффективные способы их вывода для отладки и визуализации.
🔸 Классический цикл for
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
std::cout << arr[i];
if (i < size - 1) std::cout << ", ";
}
}✅ Полный контроль над форматированием
✅ Легко менять разделители
🔸 Range-based for (C++11)
for (int i : std::array<int, 5>{arr, arr + size}) {
std::cout << i << " ";
}✅ Лаконичнее
✅ Меньше ошибок с индексами
🔸STL: std::copy + std::ostream_iterator
std::copy(arr, arr + N,
std::ostream_iterator<T>(std::cout, ", "));
✅ STL-подход
✅ Работает с любым типом
🔸Многомерные массивы
void print2DArray(int arr[][3], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
std::cout << arr[i][j] << " ";
}
std::cout << std::endl;
}
}Вложенные циклы для матриц.
🔸std::array — современный подход
template<typename T, size_t N>
void printArray(const std::array<T, N>& arr) {
for (size_t i = 0; i < N; ++i) {
std::cout << arr[i];
if (i < N - 1) std::cout << ", ";
}
}
✅ Размер известен на компиляции
✅ Безопасность + удобство
🔸 Пользовательские типы
struct Person {
std::string name;
int age;
friend std::ostream& operator<<(
std::ostream& os, const Person& p) {
return os << p.name << " (" << p.age << ")";
}
};Переопределяем
operator<< для кастомных объектов.🔸 Практика: анализ сенсоров
struct SensorReading {
double temperature;
double humidity;
friend std::ostream& operator<<(
std::ostream& os, const SensorReading& sr) {
return os << "Temp: " << sr.temperature
<< "°C, Humidity: "
<< sr.humidity << "%";
}
};🔸 Когда что использовать?
• Простой for — полный контроль
• Range-based — современный код
• std::copy — STL-стиль
• std::array — фиксированный размер
• operator<< — свои типы
⬇️Итог
Эффективный вывод массива — это представление данных в понятном формате для отладки, анализа и работы с пользователем.
📎 Статья
🎙 Новости
📝 База вопросов
