Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив, его размер. / 24 сообщений из 24, страница 1 из 1
26.12.2005, 17:10
    #33457971
alex83_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Привет программисты, если нетрудно, помогите!!!
Есть динамический массив, вот:

int *mas = new int[100];

Как теперь определить сколько в нём записей.

Мне надо сделать так:
for(int i=0; i<=[кол. элем. мас.]; i++)
{
секрет
}
...
Рейтинг: 0 / 0
26.12.2005, 17:15
    #33457991
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Функция rand спасет отцов русской демократии. :-))))

--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
26.12.2005, 17:20
    #33458011
vbnv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
1) ошибка в условии конца цикла -- если от нуля, то нужен знак "меньше"
for(int i=0; i<[кол. элем. мас.]; i++) {
секрет
}

2) элементов массива в Вашем примере не более 100, кроме этого ничего нельзя сказать. Либо нужно в конце записывать некий "символ конца данных" (как 0 в Сшных строках), либо завести где-то отдельно счетчик записанного.

3) лучше STL, если возможно
...
Рейтинг: 0 / 0
26.12.2005, 17:26
    #33458029
saint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
если 0 - это не запись, то как длину ASCIZ
Код: plaintext
1.
2.
3.
int i=- 1 ;
while(i< 99  && mas[++i]> 0 );
int len=i;
...
Рейтинг: 0 / 0
26.12.2005, 17:28
    #33458038
saint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
лучше так
Код: plaintext
1.
2.
3.
int i=- 1 ;
while(i< 99  && mas[++i]!= 0 );
int len=i;
...
Рейтинг: 0 / 0
26.12.2005, 17:32
    #33458048
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
saintлучше так
Код: plaintext
1.
2.
3.
int i=- 1 ;
while(i< 99  && mas[++i]!= 0 );
int len=i;

А нуль мы что, уже и за число не считаем?
...
Рейтинг: 0 / 0
26.12.2005, 17:36
    #33458060
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Блин! Четко же обозначено что массив динамический.
И определить в неком другом месте (функции, например) кол-во записей в нем,
не представляется возможным, кроме как передачей в это место размера этого массива.
Все попытки выкрутится с помощью якобы не используемых значений - от лукавого.
vbnv метко заметил насчет STL. есть vektor - и не надо изобретать велосипеды.
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
26.12.2005, 17:41
    #33458075
alex83_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Господи я и неожидал что здесь столько акул С++ плавает.
Я ошибся в своём примере.

int *mas = new int[кол записей в таблице - БД];

Тоесть всегда разное количество.
Я могу это число в переменную запомнить. А потом подставлять но это некрасиво, хочется определять. Плиз. хелп ми.
...
Рейтинг: 0 / 0
26.12.2005, 17:53
    #33458111
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
--
There Ain't No Such Thing As A Free Lunch
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
include <algorithm>
include <vector>

stl::vector mas<int>( кол-во записей );

....

void somefunc( int a ) { /* секрет */ }

for_each( mas.start(), mas.end(), somefunc );

...
Рейтинг: 0 / 0
26.12.2005, 17:56
    #33458114
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
упс! ошибся. вместо start() надо begin() ;-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
include <algorithm>
include <vector>

stl::vector mas<int>( кол-во записей );

....

void somefunc( int a ) { /* секрет */ }

for_each( mas.begin(), mas.end(), somefunc );

...
Рейтинг: 0 / 0
26.12.2005, 18:13
    #33458158
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Можно попробовать распределять память malloc-ом и, затем, для вычисления длины массива пользоваться _msize из <malloc.h>
...
Рейтинг: 0 / 0
26.12.2005, 18:45
    #33458214
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
_БалтикаМожно попробовать распределять память malloc-ом и, затем, для вычисления длины массива пользоваться _msize из <malloc.h>
Не портабельно. :-) Хотя многие считают, что нет систем кроме Виндовс, и Б.Г. пророк ее. :-))))
...
Рейтинг: 0 / 0
26.12.2005, 19:49
    #33458306
spectre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
alex83_sql int *mas = new int[кол записей в таблице - БД];

Тоесть всегда разное количество.
Я могу это число в переменную запомнить. А потом подставлять но это некрасиво, хочется определять. Плиз. хелп ми.

А в чем проблема? Я бы так и сделал. Хранить 2 байта где-нибудь - это проще чем вычислять везде размерность. Хотя условие задачи меня, если честно, пугает - если есть база данных, зачем создавать массив?
...
Рейтинг: 0 / 0
27.12.2005, 14:57
    #33459718
alex83_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
В этой задече так надо.
...
Рейтинг: 0 / 0
27.12.2005, 15:04
    #33459746
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
vbnv2) элементов массива в Вашем примере не более 100,

Что значит -"не более ста" - элементов в массиве РОВНО СТО. С номерами от 0 до 99.
...
Рейтинг: 0 / 0
27.12.2005, 15:06
    #33459752
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
BlackStar _БалтикаМожно попробовать распределять память malloc-ом и, затем, для вычисления длины массива пользоваться _msize из <malloc.h>
Не портабельно. :-) Хотя многие считают, что нет систем кроме Виндовс, и Б.Г. пророк ее. :-))))
Если юзать что-то кроссплатформенное, типа Net'a, то проблем воще нет.
...
Рейтинг: 0 / 0
27.12.2005, 15:08
    #33459760
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
alex83_sqlТоесть всегда разное количество.
Я могу это число в переменную запомнить. А потом подставлять но это некрасиво, хочется определять.

Определять - невозможно. Ты сам должен выделять память под массив и сам должен хранить его выделенный размер. Если ты хочешь, чтобы это за тебя делал кто-то другой, используй std::vector или другие классы динамических массивов (имеется в виду из других библиотек, помимо STL).
...
Рейтинг: 0 / 0
27.12.2005, 17:19
    #33460173
_Балтика
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
MasterZiv alex83_sqlТоесть всегда разное количество.
Я могу это число в переменную запомнить. А потом подставлять но это некрасиво, хочется определять.

Определять - невозможно.
delete то определяет... Есле мне память не изменяет, стандартный new (в некоторых реализациях c++) пишет размер выделенной области в 2 или 4 байта, предшествующие распределенной области. Но тут опять
BlackStarНе портабельно. :-) Хотя многие считают, что нет систем кроме Виндовс, и Б.Г. пророк ее. :-))))
...
Рейтинг: 0 / 0
27.12.2005, 17:28
    #33460192
alex83_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Всем спасибо за помощь. Я решил просто запоминать в переменной. а потом использовать.

Но было интересно как можно ещё. Спасибо.
...
Рейтинг: 0 / 0
27.12.2005, 21:05
    #33460597
spectre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Ну и я тебе о том же...
spectreА в чем проблема? Я бы так и сделал. Хранить 2 байта где-нибудь - это проще чем вычислять везде размерность...
...
Рейтинг: 0 / 0
28.12.2005, 03:32
    #33460770
Forgottn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Хы... Есть один безумный вариант, но он сработает только если до цикла больше не выделяется память... Можно считать количество свободной памяти до создания массива, используя что-нибудь вроде вот такой штуки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
#if ( defined(__COMPACT__)||defined(__LARGE__)||defined(__Huge__) )
/* for Compact, Large and Huge models of memory */
long heapinf() {
	long total = farcoreleft();
	farheapinfo heap;
	switch( farheapcheck() ) {
		case _HEAPEMPTY:
			total = - 1 ;
			break;
		case _HEAPCORRUPT:
			total = - 2 ;
			break;
		case _HEAPOK:
			heap.ptr = NULL;
			while(farheapwalk(&heap) != _HEAPEND)
				if(!heap.in_use)
					total += heap.size;
					break;
		}
	return total;
}
#else
/* for Tiny, Small and Medium models of memory */
long heapinf() {
	long total = coreleft();
	heapinfo heap;
	switch( heapcheck() ) {
		case _HEAPEMPTY:
			total = - 1 ;
			break;
		case _HEAPCORRUPT:
			total = - 2 ;
			break;
		case _HEAPOK:
			heap.ptr = NULL;
			while(heapwalk(&heap) != _HEAPEND)
				if(!heap.in_use)
					total += heap.size;
					break;
		}
	return total;
}
#endif

далее сравнивать это значение, с количеством выделенной и разницу делить на sizeof(int)

и опять же

авторBlackStar
Не портабельно. :-) Хотя многие считают, что нет систем кроме Виндовс, и Б.Г. пророк ее. :-))))
...
Рейтинг: 0 / 0
28.12.2005, 11:03
    #33461247
BlackStar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
Тут уже не то что не портабельно, а из гаубицы по мухам! :-))))
--
There Ain't No Such Thing As A Free Lunch
...
Рейтинг: 0 / 0
28.12.2005, 11:46
    #33461419
vbnv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
MasterZiv vbnv2) элементов массива в Вашем примере не более 100,

Что значит -"не более ста" - элементов в массиве РОВНО СТО. С номерами от 0 до 99.

:) да, грешен -- нужно было еще оговорку "значимых для alex83_sql" и еще для верности "расположенных подряд, начиная с индекса 0"
...
Рейтинг: 0 / 0
28.12.2005, 22:14
    #33463146
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический массив, его размер.
_Балтика
delete то определяет...

Кто тебе сказал ? Обманули значит.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив, его размер. / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]