Как мне сделать int, который является длиной массива в C ++? - PullRequest
0 голосов
/ 09 апреля 2020

Итак, в основном я пытаюсь написать метод, который возвращает двукратную длину массива, но я не могу понять, как преобразовать длину в int, чтобы ее можно было использовать. Я пытался выяснить правильный метод для использования, так как sizeof () возвращает количество байтов, а не длину массива. Какой метод я должен использовать и как я могу это исправить? Вот мой код:

int main(int argc, const char * argv[]) {
    int arr[] = {1,2,3,4,5};
    cout << getLen(arr);
    return 0;
}

int getLen( int *arr ){
    int len = sizeof(arr);
    return 2 * len;
}

Ответы [ 3 ]

2 голосов
/ 09 апреля 2020

Я думаю, что это может быть XY проблема . В конечном счете, если вам нужно такое поведение в C ++, вы должны использовать объект std :: vector. Например:

#include <iostream>
#include <vector> // Remember to include this

int getLen(std::vector<int> &vec) // Pass vec by reference rather than as a pointer
{
    return static_cast<int>(vec.size()) * 2; // Use .size() to get the number of elements in vec
    // ^^^ .size() returns a value of type size_t which is converted to an int using static_cast<int>
}

int main()
{
    std::vector<int> vec = {1,2,3,4,5};

    std::cout << getLen(vec);

    return 0;
}
1 голос
/ 09 апреля 2020
#include <iostream>

template<typename T,std::size_t n>
std::size_t get_new_len(T (&a)[n]) {
    return n*2;
}

int main() {
    int a[10] = {0};
    std::cout << get_new_len(a) << "\n";
}

Вы можете сделать это таким образом, используя вывод аргумента шаблона. выход 20

0 голосов
/ 09 апреля 2020

Результат sizeof(arr) в основном не такой, как в функции, я не понимаю почему, но он работает так:

int getLen(int *arr, int arrSize)
{
    int len = arrSize / sizeof(int);

    return len;
}

int main(int argc, const char * argv[])
{
    int arr[] = { 1, 2, 3, 4, 5 };

    cout << getLen(arr,sizeof(arr));

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...