Как определить длину массива?
Существует ли способ узнать, сколько значений в массиве? Также было бы полезно определить, достиг ли я конца массива.
5 ответ(ов)
Используя sizeof myArray
, вы получите общее количество байтов, выделенных для этого массива. Затем, чтобы определить количество элементов в массиве, вы можете разделить на размер одного элемента в массиве: sizeof myArray[0]
.
Таким образом, вы получите что-то подобное:
size_t LengthOfArray = sizeof myArray / sizeof myArray[0];
Так как sizeof
возвращает значение типа size_t
, результат LengthOfArray
также будет иметь этот тип.
Да, есть способ определить количество элементов в массиве!
Попробуйте использовать sizeof(array) / sizeof(array[0])
.
Также можно определить, достигли ли вы конца массива.
Однако я не вижу способа сделать это, если ваш массив не является массивом символов (т.е. строкой).
P.S.: В C++ всегда используйте std::vector
. Это обеспечит вам множество встроенных функций и расширенные возможности.
Этот вопрос на самом деле является старым и легендарным, и уже существует множество замечательных ответов на него. Но с течением времени в языках программирования добавляются новые функциональные возможности, поэтому нам нужно обновлять информацию в соответствии с новыми доступными функциями.
Я только что заметил, что никто еще не упомянул о C++20, и поэтому решил написать ответ.
C++20
В C++20 в стандартную библиотеку добавлен новый и более удобный способ определения длины массива — это функция std::ssize()
. Эта функция возвращает signed value
.
#include <iostream>
int main() {
int arr[] = {1, 2, 3};
std::cout << std::ssize(arr);
return 0;
}
C++17
В C++17 был предложен лучший способ (на то время) для той же цели – это std::size()
, определенный в заголовке iterator
.
#include <iostream>
#include <iterator> // обязательно для std::size
int main() {
int arr[] = {1, 2, 3};
std::cout << "Size is " << std::size(arr);
return 0;
}
P.S. Этот метод также работает для vector
.
Старый способ
Этот традиционный подход уже упоминался во многих других ответах.
#include <iostream>
int main() {
int array[] = { 1, 2, 3 };
std::cout << sizeof(array) / sizeof(array[0]);
return 0;
}
Для справки: если вам интересно, почему этот метод не работает, когда массив передается в другую функцию, причина в том, что в C++ массив не передается по значению, вместо этого передается указатель на массив. В некоторых случаях передача целых массивов может быть медленной операцией. Вы можете проверить это, передав массив в какую-то функцию, изменив его там, а затем снова напечатав массив в main
. Вы получите обновленные результаты.
Также, как вы уже знаете, функция sizeof()
возвращает количество байт, поэтому в другой функции она вернет размер, выделенный для указателя, а не для всего массива. Поэтому этот подход не работает.
Но я уверен, что вы сможете найти хороший способ сделать это в зависимости от ваших требований.
Счастливого кодинга!
Вы привели код на C++, который вычисляет длину массива. Давайте разберем его.
#include <iostream>
int main ()
{
using namespace std;
int arr[] = {2, 7, 1, 111};
auto array_length = end(arr) - begin(arr);
cout << "Length of array: " << array_length << endl;
}
В этом коде мы определяем массив целых чисел arr
, состоящий из 4 элементов. Чтобы вычислить длину массива, мы используем стандартные функции begin()
и end()
, которые возвращают итераторы на начало и конец массива соответственно. Разница между этими двумя итераторами дает нам количество элементов в массиве.
Результатом выполнения программы будет вывод:
Length of array: 4
Таким образом, данный код корректно вычисляет и выводит длину заданного массива. Если у вас есть дополнительные вопросы по этому коду, не стесняйтесь задавать их!
В std::vector
есть метод size()
, который возвращает количество элементов в векторе. Так что, если вы хотите узнать, сколько элементов у вас в std::vector
, просто вызовите yourVector.size()
. Это как раз то, что вам нужно! 😉
Как объявить 2D массив в C++ с использованием оператора new?
Что такое Правило трёх?
Как разделить строку на массив в Bash?
Как удалить элемент из std::vector<> по индексу?
Проверка присутствия элемента в массиве