определение размера матрицы
Имеется массив с матрицами(трехмерный массив), над матрицами из этого массива выполняется операция, но перед ней нужно сравнить эти матрицы по размерам. Как можно узнать количество строк и столбцов в матрице?
заранее спасибо!
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Определение размера файла
Здравствуйте, я учусь на программиста, нужна помощь в программе. #include <fstream.h> #include.
Определение размера структуры
Здравствуйте ,не могли б вы объяснить мне почему размер этой структуры 12 байт , заранее спасибо.
Определение размера массива
Привет всем у меня несколько вопросов по языку си (компилятор gcc). 1) Есть, например след код.
7595 / 6418 / 2924
Регистрация: 14.04.2014
Сообщений: 27,946
Откуда мы знаем, как у тебя они реализованы?
Регистрация: 02.12.2017
Сообщений: 25
Сообщение от nmcf
Откуда мы знаем, как у тебя они реализованы?
1 2 3 4 5 6 7 8 9
int ***arr = new int**[u] for (int i = 0; iu; i++) { arr[i] = new int*[y]; for (int j = 0; jy; j++) { arr[i][j] = new int[x]; } }
7595 / 6418 / 2924
Регистрация: 14.04.2014
Сообщений: 27,946
Ты должен где-то хранить u, y, x для каждого массива.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Определение размера структуры
RAD STudio 10.2 Описываем новый тип: typedef struct < WORD id; >DBHeader; При этом.
Определение размера PIPE
Здравствуйте! Поставлена задача — определить размер pipe для вашей операционной системы. Написал.
sh — Определение размера каталога
Народ помогите разобраться. Сейчас пишу скрипт sh и здесь возникла загвоздка: Надо определить.
Определение размера изображения
pitajus opredelit razmer photo. vot code: strUpload=’C:Inetpubwwwrootsexymailimagesprofiles ‘ .
Как определить длину массива в C++
По сути, когда мы говорим о длине массива, мы имеем в виду общее количество элементов, присутствующих в соответствующем массиве. Например, посмотрите на массив ниже:
int array1[] =
Размер (или длина) массива равна общему количеству элементов в нем. Следовательно, в данном случае это «5».
Способы определения длины массива в C++
Теперь давайте посмотрим на различные способы, с помощью которых мы можем выяснить длину массива в C++:
- поэлементный подсчет,
- begin() и end(),
- функция sizeof(),
- функция size() в STL,
- указатели.
Теперь давайте обсудим каждый метод подробно и с примерами.
1: Поэлементный подсчет
Самый очевидный способ – перебрать заданный массив и одновременно подсчитать общее количество перебранных элементов.
Но если мы заранее не знаем длину массива для итерации, то в таком случае мы не можем использовать цикл for. Эту проблему можно решить, используя простой цикл for-each. Внимательно посмотрите на приведенный ниже код.
#include #include using namespace std; int main() < int c; int arr[]=; cout cout
Вы получите такой результат:
The array is: 1 2 3 4 5 6 7 8 9 0 The length of the given Array is: 10
Как мы говорили выше, здесь мы перебираем весь массив arr, используя цикл for-each с итератором i. Значение счетчика c увеличивается по мере итерации. Когда перебор закончится, в c вы найдете длину данного массива.
2: Функции begin() и end()
Мы также можем вычислить длину массива, используя стандартные функции begin() и end(). Эти две функции возвращают итераторы, указывающие на начало и конец массива соответственно. Внимательно посмотрите на данный код:
#include #include using namespace std; int main() < //Given Array int arr[] = < 11, 22, 33, 44 >; cout
Следовательно, разница между возвращаемыми значениями двух функций end() и begin() дает нам размер или длину данного массива. Данный код вернет:
The Length of the Array is : 4
3: Функция sizeof()
Оператор sizeof() в C++ возвращает размер переданной переменной или данных в байтах. Кроме того, он возвращает общее количество байтов, необходимых для хранения массива. Следовательно, если мы просто разделим размер массива на размер, занимаемый каждым его элементом, мы узнаем общее количество элементов, присутствующих в массиве.
Давайте посмотрим, как это работает:
#include #include using namespace std; int main() < //Given array int arr[] = ; int al = sizeof(arr)/sizeof(arr[0]); //length calculation cout
В результате мы получим:
The length of the array is: 3
4: Функция size() в STL
В стандартной библиотеке есть функция size(), которая возвращает количество элементов в заданном контейнере (в нашем случае это массив).
#include #include using namespace std; int main() < //Given array arrayarr< 1, 2, 3, 4, 5 >; //Using the size() function from STL cout
В результате вы получите:
The length of the given Array is: 5
5: Определение длины массива с помощью указателей
Узнать длину массива можно с помощью указателей. Давайте посмотрим, как это делается:
#include #include using namespace std; int main() < //Given array int arr[6] = ; int len = *(&arr + 1) - arr; //*(&arr + 1) is the address of the next memory location // just after the last element of the array cout
В результате мы получим:
The length of the array is: 6
Выражение *(arr+1) выдает адрес области памяти сразу после последнего элемента массива. Следовательно, разница между ним и начальным местоположением массива (или базовым адресом, arr) показывает общее количество элементов, присутствующих в данном массиве.
Заключение
Итак, в этом мануале мы обсудили различные методы определения длины массива в C++. Все приведенные выше методы просты в использовании, однако мы предпочитаем применять цикл for-each – не только из-за удобочитаемости кода, но и из-за его кросс-платформенной надежности.
число элементов массива (C)
будет работать? а то у меня что-то не особо работает=([/QUOTE]Не будет работать, так как в функции уже идет речь не о массиве, а об указателя на массив. А длина указателя равна 4 байта.
21 сентября 2006 года
5.6K / / 13.08.2003
int сhsize(int a[], int n) if (n> sizeof(a)/sizeof(int) )
return 1;
>
будет работать? а то у меня что-то не особо работает=([/quote]
эээ. а как она должна работать? на i386 архитектуре, при n>1 она будет возвращать 0.
21 сентября 2006 года
5.6K / / 13.08.2003
добавтье в функцию параметр — размер передаваемого массива
21 сентября 2006 года
2.2K / / 04.02.2006
учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:
int сhsize(int sizeA, int n) <
if (n > sizeA/sizeof(int) ) return 0;
return 1;
>
а можно в функцию сразу послать как параметр namefunction(sizeof(a)/sizeof(int), тогда
int сhsize(int n1, int n2) <
if (n2 > n1 ) return 0;
return 1;
>
21 сентября 2006 года
267 / / 25.07.2006
[QUOTE=OlgaKr]учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:
int сhsize(int sizeA, int n) <
if (n > sizeA/sizeof(int) ) return 0;
return 1;
>
а можно в функцию сразу послать как параметр namefunction(sizeof(a)/sizeof(int), тогда
int сhsize(int n1, int n2) <
if (n2 > n1 ) return 0;
return 1;
>
[/QUOTE]Это уже решение. Только Знак больше нужно заменить на больше равно.
22 сентября 2006 года
2.2K / / 04.02.2006
Только Знак больше нужно заменить на больше равно.
а это уже не ко мне, я мысли читать не умею.
у fly_girl написано больше (copy/paste), ей видней что она хочет.
з.ы. для меня вообще ситуация немного странная, когда неизвестен размер стати-го массива.
22 сентября 2006 года
4.8K / / 20.01.2000
int сhsize(int a[], int n) if (n> sizeof(a)/sizeof(int) )
return 1;
>
будет работать? а то у меня что-то не особо работает=([/QUOTE]
В C++ будет работать так:
template
int сhsize( int (&a)[N], int n )
return (n > N) ? 0 : 1;
>
22 сентября 2006 года
2.2K / / 04.02.2006
[quote=Green]В C++ будет работать так: . [/quote]
у нее задача по С
22 сентября 2006 года
1.1K / / 19.09.2006
При помощи sizeof можно определить только размер массива в стеке текущей функции, что зачастую бессмысленно, ибо этот размер задаёт сам программист константой
const int cArSize = 100;
char str [cArSize];
А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) — точное название функции не помню, хелпа под рукой сейчас нет 🙁
Function (TRecord *pRecArray)
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
>
22 сентября 2006 года
267 / / 25.07.2006
[QUOTE=el scorpio]А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) — точное название функции не помню, хелпа под рукой сейчас нет 🙁
Function (TRecord *pRecArray)
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
>
[/QUOTE]Согласно help _msize.
#include
#include
#include
int сhsize(int *a, int n)
if(n>=_nsize(a)/sizeof(int) )
return 0;
return 1;
>
void main()
int *a = (int *)malloc(100*sizeof(int));
int t = chsize(a, 80);
.
.
22 сентября 2006 года
221 / / 11.09.2006
Да никак нельзя узнать размер массива. Для чего придумали строки заканчивающиеся нулем?
22 сентября 2006 года
13 / / 24.04.2006
я попробую _nsize.
дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.
22 сентября 2006 года
1.1K / / 19.09.2006
[QUOTE=fly_girl]дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.[/QUOTE]
Хорошая функция 🙂
Вот только ситуацию такую проще не создавать, чем решать:D
А вообще, в подобных ситуациях лучше использовать стандартный Builder’овский шаблон DynamicArray. Этот объект-контейнер изображает массив и сам следит за выделением/освобождением памяти, а также корректностью индексации.
22 сентября 2006 года
13 / / 24.04.2006
просто задание с обычными массивамии
и просили эту ситуацию учесть..
22 сентября 2006 года
221 / / 11.09.2006
[QUOTE=fly_girl]просто задание с обычными массивамии
и просили эту ситуацию учесть..[/QUOTE]
Мое мнение: либо это задача на смекалку, либо твой учитель курит грибы. Но в обоих случаях переданный функции указатель — это всего лишь число соответствующее адресу в памяти.
[Решено] Как получить размер массива на C?
Но в переменной size получил не 12, а 48 (догадываюсь, что связано с тем, что unsigned int — это 4 байта).
Создатель темы Размещено : 10.04.2023 14:28
Метки темы
Top level Admin
По поводу 48-ми все верно, значит на данной машине int — 4 байта, поэтому в результате получим 12 * 4 = 48. Теперь ближе к сути:
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(array[0]);
Размер массива в байтах (48) делим на размер одного элемента (4), по итогу получаем 12.
Ответить Цитата
Размещено : 10.04.2023 14:46
New member
@aveal Получается, что можно и так?
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(int);
Я проверил, получилось 12 тоже.
Ответить Цитата
Создатель темы Размещено : 10.04.2023 15:14
Top level Admin
От: @nik_99
@aveal Получается, что можно и так?
unsigned int array[12]; size_t arraySize = sizeof(array) / sizeof(int);
Я проверил, получилось 12 тоже.
Технически да, но практически есть нюансы. Если изменится тип данных, то придется изменения внести везде, где использована такая конструкция. Соответственно, об этом очень просто забыть, что приведет к трудноотлавливаемым багам. Плюс, мой первый вариант дает возможность обернуть все это в макрос:
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) unsigned int array[12]; size_t arraySize = ARRAY_SIZE(array);