char peremen_t[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
Мне нужно вывести все элементы массива. Я понимаю, что для этого нужен цикл:
for (int i = 0; i < 10; i++) {
qDebug() <<"peremen_t[i] " << peremen_t[i];
}
А что если добавить несколько элементов, скажем так:
char peremen_t[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 101, 102, 103};
То как перебирать все эти элементы, постоянно менять условие i < ...? Вот собственно вопрос: как перебирать массив элементов, не зная сколько там элементов? :)
Ответ
Имеется несколько подходов. Во первых размер массива можно вычислить по формуле
sizeof( массива ) / sizeof( элемента массива ). Например
for ( size_t i = 0; i < sizeof( peremen_t ) / sizeof( *peremen_t ); i++ )
{
qDebug() <<"peremen_t[i] " << peremen_t[i];
}
Во-вторых, вы можете использовать цикл for на основе диапазона. Если вам при этом нужен индекс элемента, то вы можете определить его до цикла. Например,
size_t i = 0;
for ( auto x : peremen_t )
{
qDebug() <<"peremen_t[" << i << "] " << x;
++i;
}
Также вы можете использовать цикл с итераторами. Например,
#include
// ...
size_t i = 0;
for ( auto it = std::begin( peremen_t ); it != std::end( peremen_t ); ++it, ++i )
{
qDebug() <<"peremen_t[" << i << "] " << *it;
}
И, наконец, вы можете написать шаблонную функцию, которая выполняет требуемую задачу. Например,
template
Кроме того вы можете использовать какое-нибудь граничное значение в массиве. Например, для символьных массивов это может быть '\0' при условии, что действительные элементы массива не могут содержать этот символ, или какое-нибудь другое уникальное значение. Например,
char peremen_t[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 0 };
// ^^^
for ( size_t i = 0; permen_t[i] != '\0'; i++ )
{
qDebug() <<"peremen_t[i] " << peremen_t[i];
}
Комментариев нет:
Отправить комментарий