Форум » C/C++ для начинающих (C/C++ for beginners) » Доступ к элементам массивов. » Ответить

Доступ к элементам массивов.

Сыроежка: Часто начинающие программисты, приступившие к изучению C++, сталкиваются с проблемой, как определить число элементов в массиве, например, при использовании цикла для вывода элементов массива на консоль. Проще говоря, как последовательно обратиться к элементам массива. Вот один из таких вопросов начинающего программиста на Stackoverflow What is the recommended way loop through an array in C++? В таких языках, как, например, Java, JavaScript, C# и других, подобных им языках, имеются члены или методы такие, как length, Length, length() и т.п. , которые позволяют легко получить число элементов в массиве, так как массивы в таких языках определяются в виде классов или объектов К примеру в C# можно вывести элементы на консоль следующими способами [pre2] using System; public class Test { public static void Main() { int[] shoppingList = { 1, 2, 3 }; for ( int i = 0, n = shoppingList.Length; i < n; i++ ) { Console.WriteLine( shoppingList ); } Console.WriteLine(); foreach( int item in shoppingList ) { Console.WriteLine( item ); } } } [/pre2] Вывод программы на консоль будет [pre2] 1 2 3 1 2 3 [/pre2] В C++ массивы не являются объектами классов, поэтому у них нет таких членов класса или методов, которые позволяют получить количество элементов в массиве. Однако получить такое значение достаточно просто. Самый простой способ - это использовать оператор sizeof. Например, sizeof( shoppingList ) / sizeof( *shoppingList ). Чтобы не писать такое длинное выражение, можно использовать стандартную функцию std::size, которая появилась с принятием стандарта C++ 17. Например, std::size( shoppingList ). Также можно использовать конструкцию std::extent_v<decltype( shoppingList )>. Альтернативные подходы - это использовать итераторы с помощью стандартных функций std::begin, std;:end и подобные им, а также можно использовать стандартные алгоритмы. Ниже приведена демонстрационная программа, в которой показаны описанные подходы к обращению к элементам массива для вывода их на консоль. [pre2] #include <iostream> #include <iterator> #include <type_traits> int main() { int shoppingList[] = { 1, 2, 3 }; for ( size_t i = 0; i < sizeof( shoppingList ) / sizeof( *shoppingList ); i++ ) { std::cout << shoppingList << '\n'; } std::cout << '\n'; for ( size_t i = 0; i < std::size( shoppingList ); i++ ) { std::cout << shoppingList << '\n'; } std::cout << '\n'; for ( size_t i = 0, n = std::extent_v<decltype( shoppingList )>; i < n; i++ ) { std::cout << shoppingList << '\n'; } std::cout << '\n'; for ( auto first = std::begin( shoppingList ), last = std::end( shoppingList ); first != last; ++first ) { std::cout << *first << '\n'; } std::cout << '\n'; std::for_each( std::begin( shoppingList ), std::end( shoppingList ), []( const auto &item ) { std::cout << item << '\n'; } ); std::cout << '\n'; std::copy( std::begin( shoppingList ), std::end( shoppingList ), std::ostream_iterator<int>( std::cout, "\n" ) ); std::cout << '\n'; } [/pre2] Вывод программы на консоль [pre2] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3[/pre2]

Ответов - 0



полная версия страницы