Есть альтернатива size(), только для массивов?

190
28 ноября 2018, 17:10
void array_print(vector<int> & arr)
{
for (int i = 0; i < arr.size(); ++i) cout<<i<<" Ячейка массива:"<<arr[i]<<endl;
}
void array_print(int arr[])
{
for (int i = 0; i < /*arr.size()*/; ++i) cout<<i<<" Ячейка массива:"<<arr[i]<<endl;
}
Answer 1

В функции array_print параметр arr является указателем на элемент массива. Узнать размер массива по указателю на его элемент невозможно.

В ситуации, когда размер массива не фиксирован на стадии компиляции, у вас есть только один вариант - передавать размер массива извне вручную

void array_print(int arr[], int n)
{
  for (int i = 0; i < n; ++i) cout<<i<<" Ячейка массива:"<<arr[i]<<endl;
}
Answer 2

Есть шаблонная.

template<class T, size_t N>
size_t length(T(&)[N])
{
    return N;
}
int main()
{
    int a[10];
    cout << length(a) << endl;
}

Но учтите, что фокус типа

int * a = new int[20];
cout << length(a) << endl;

не пройдет.

Как не пройдет и

void func(int a[])
{
    cout << length(a) << endl;
}
READ ALSO
Возврат объекта из функции

Возврат объекта из функции

Вопрос по поводу вот такого случая:

190
Получение значения из шейдера

Получение значения из шейдера

Пусть имеется простые шейдера, образующие шейдерную программу:

173
C/C++, Visual Studio, Юникод/Многобайтовые кодировки

C/C++, Visual Studio, Юникод/Многобайтовые кодировки

В настройках проекта Visual Studio можно выбирать набор используемых символовОбычно там есть два пункта:

194
Запись значения из QSpinBox в переменную int

Запись значения из QSpinBox в переменную int

Пытаюсь записать значение из QSpinBox в переменную int с помощью слота:

187