Найти длину переменной в классе шаблона [duplicate]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
5
задан Willem Van Onsem 17 November 2014 в 04:01
поделиться

5 ответов

Вам нужно помнить, что в массиве переменных массивов нет возможности извлекать размер массива из указателя.

const int SIZE = 10;
int list[SIZE];
// or
int* list = new int[SIZE];  // do not forget to delete[]
1
ответ дан igleyy 28 August 2018 в 02:26
поделиться

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

int largest(int *list, int list_size, int highest_index)

Массивы на C ++ довольно бедны, тем скорее вы научитесь использовать векторы, тем легче вы будете найти вещи.

5
ответ дан john 28 August 2018 в 02:26
поделиться

C ++ основан на C и наследует многие функции от него. В связи с этим вопросом он наследует что-то под названием «эквивалентность массива / указателя», которая является правилом, которое позволяет массиву распадаться на указатель, особенно при передаче в качестве аргумента функции. Это не означает, что массив является указателем, это просто означает, что он может распадаться на один.

void func(int* ptr);

int array[5];
int* ptr = array; // valid, equivalent to 'ptr = &array[0]'
func(array); // equivalent to func(&array[0]);

Эта последняя часть наиболее важна для вашего вопроса. Вы передаете not массив, вы передаете адрес 0-го элемента.

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

static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);

Поскольку указатель не содержит информации о размере, вы не можете использовать sizeof.

void func(int* array) {
    std::cout << sizeof(array) << "\n";
}

Это выведет размер «int * "- это 4 или 8 байтов в зависимости от 32 против 64 бит.

Вместо этого вам нужно принять параметры размера

void func(int* array, size_t arraySize);

static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);

Даже если вы попытаетесь передать фиксированный размер массив, оказывается, это синтаксический сахар:

void func(int array[5]);

http://ideone.com/gaSl6J

Помните, как я сказал, что массив НЕ является указателем, эквивалентным?

int array[5];
int* ptr = array;

std::cout << "array size " << sizeof(array) << std::endl;
std::cout << "ptr size " << sizeof(ptr) << str::endl;

размер массива будет 5 * sizeof (int) = 20 ptr size будет sizeof (int *), который будет либо 4, либо 8 байтами.

sizeof возвращает размер поставляемого типа, если вы поставляете объект, тогда он выводит тип и возвращает размер этого

. Если вы хотите знать как человек y элементов массива находятся в массиве, когда у вас есть массив, а не указатель, вы можете написать

sizeof(array) / sizeof(array[0])

или sizeof (array) / sizeof (* array)

6
ответ дан kfsone 28 August 2018 в 02:26
поделиться

Простой ответ: вы не можете. Вам нужно сохранить его в переменной. Большим преимуществом C ++ является наличие STL, и вы можете использовать вектор. size () дает размер вектора в этот момент.

#include<iostream>
#include<vector>
using namespace std; 
int main () {
    vector<int> v;
    for(int i = 0; i < 10; i++) {
        v.push_back(i);
    }
    cout << v.size() << endl;
    for(int i = 0; i < 10; i++) {
        v.push_back(i);
    }
    cout << v.size() << endl;
    return 0;
}

output: 10 20

Не тестировалось. Но, должен работать. ;) [/ Д2]

2
ответ дан saint1729 28 August 2018 в 02:26
поделиться

Указатели не имеют информации о количестве элементов, на которые они ссылаются. Если вы говорите о первом аргументе вызова функции, то если список - это массив, вы действительно можете использовать синтаксис

sizeof( list ) / sizeof( int )

Я хотел бы добавить, что существует три подхода. Первый - использовать массивы, переданные по ссылке. Второй - использовать указатель на первый элемент и количество элементов. И третий - использовать два указателя - обычно указатель начала и последний указатель как стандартные алгоритмы. У массивов персонажей есть дополнительная возможность обрабатывать их.

2
ответ дан Vlad from Moscow 28 August 2018 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: