6

Как определить длину массива?

1

Существует ли способ узнать, сколько значений в массиве? Также было бы полезно определить, достиг ли я конца массива.

5 ответ(ов)

1

Используя sizeof myArray, вы получите общее количество байтов, выделенных для этого массива. Затем, чтобы определить количество элементов в массиве, вы можете разделить на размер одного элемента в массиве: sizeof myArray[0].

Таким образом, вы получите что-то подобное:

size_t LengthOfArray = sizeof myArray / sizeof myArray[0];

Так как sizeof возвращает значение типа size_t, результат LengthOfArray также будет иметь этот тип.

0

Да, есть способ определить количество элементов в массиве!

Попробуйте использовать sizeof(array) / sizeof(array[0]).

Также можно определить, достигли ли вы конца массива.

Однако я не вижу способа сделать это, если ваш массив не является массивом символов (т.е. строкой).

P.S.: В C++ всегда используйте std::vector. Это обеспечит вам множество встроенных функций и расширенные возможности.

0

Этот вопрос на самом деле является старым и легендарным, и уже существует множество замечательных ответов на него. Но с течением времени в языках программирования добавляются новые функциональные возможности, поэтому нам нужно обновлять информацию в соответствии с новыми доступными функциями.

Я только что заметил, что никто еще не упомянул о 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() возвращает количество байт, поэтому в другой функции она вернет размер, выделенный для указателя, а не для всего массива. Поэтому этот подход не работает.

Но я уверен, что вы сможете найти хороший способ сделать это в зависимости от ваших требований.

Счастливого кодинга!

0

Вы привели код на 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

Таким образом, данный код корректно вычисляет и выводит длину заданного массива. Если у вас есть дополнительные вопросы по этому коду, не стесняйтесь задавать их!

0

В std::vector есть метод size(), который возвращает количество элементов в векторе. Так что, если вы хотите узнать, сколько элементов у вас в std::vector, просто вызовите yourVector.size(). Это как раз то, что вам нужно! 😉

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь