Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 18:45   #1
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию Узнать длинну массива

Привет Всем! У Меня возник вопрос, как узнать длинну массива если под него выделенна динамическая память. Начал учить классы, сказали сделать свой класс стэк. Для конструктора с параметрами пришлось дописать поле count и функцию MyStack *CreateMyStack для контроля параметров, конструкторы поставил в приват, но криво это выглядит и если будет вызван конструктор с неправильным count начнётся хаос
Файл.cpp
Код:
using namespace std;

MyStack::MyStack(){
	length=25;
	this->is_e=true;
	this->pStr=new char*[1];
	*pStr=new char[1];
	pStr[0][0]='\0';
}
MyStack::MyStack(int length,int count,char **pStr){
	this->length=length;
	this->count=count;
	this->pStr=new char*[count];
	this->is_e=false;
	for(int i=0;i<count;i++)
		this->pStr[i]=new char[strlen(pStr[i])+1];
	for(int i=0;i<count;i++)
		strcpy(this->pStr[i],pStr[i]);
}
MyStack *MyStack::Create_MyStack(int length,int count,char **pStr){
	if(count!=-1)
	{
		MyStack Stack(length,count,pStr);
		return &Stack;
	}
	else
	{
		if(pStr=='\0')
		{
			MyStack Stack;
			return &Stack;
		}
		else
		{
			cout<<"\tYou don't have the parametr count!!!Error Your Stack is not building\n";
			return NULL;
		}
	}
}
header file
Код:
#pragma once
#include "stdafx.h"

class MyStack
{
	int length;
	int count;
	bool is_e;
	char **pStr;
	MyStack();
	MyStack(int length,int count,char **pStr='\0');
public:
	~MyStack();
	static MyStack *Create_MyStack(int length=25,int count=-1,char **pStr='\0');
	bool Pop();
	void Push(char *str);
	int Size();
	bool Is_Empty();
	bool Is_Full();
	char Top();
	void operator +(char *str);
	void operator +(char symb);
	MyStack operator +(MyStack second);
	bool operator -(); //
	bool operator ==(MyStack second);
	bool operator <(MyStack second);
	bool operator >(MyStack second);
	bool operator <=(MyStack second);
	bool operator >=(MyStack second);
	MyStack *operator->();
};
Trust_357 вне форума Ответить с цитированием
Старый 27.09.2011, 21:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему бы не хранить размеры массива в переменных? Или я иногда предлагал на форуме хранение размеров массива в самом массиве:http://www.programmersforum.ru/showp...4&postcount=38
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2011, 22:48   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
конструкторы поставил в приват, но криво это выглядит
не так уж и криво. только так и делаю.

хотя, если подумать, то делал, пока не написал себе подобие манагера памяти.

Последний раз редактировалось f.hump; 27.09.2011 в 22:50.
f.hump вне форума Ответить с цитированием
Старый 28.09.2011, 00:34   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Trust_357

как узнать длинну массива если под него выделенна динамическая память

в общем случае - никак. У microsoft есть (была) нестандартная функция _msize()
Rififi вне форума Ответить с цитированием
Старый 28.09.2011, 12:58   #5
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию

Stilet спасибо, f.hump в чём заключается принцип манагера памяти?
Rififi спасибо сейчас посмотрю про _msize()
Жму весы!)))
Trust_357 вне форума Ответить с цитированием
Старый 28.09.2011, 14:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в чём заключается принцип манагера памяти?
Это что-то типа класса, хранящего в себе список массивов и их атрибуты типа
Код:
class Array{
 public:
   void Point;
   int Length,Width;
// Ну и какие нить методы обработки массива  - создание и освобождение например
}

class Manager{
  Array *Arrays; // Список массивов, которые нужно обрабатывать
 // Ну и какие нить методы для обработки массивов
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2011, 15:38   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
в чём заключается принцип манагера памяти?

Это что-то типа класса, хранящего в себе список массивов и их атрибуты типа
Как вариант. В целом, это дествительно класс, который предоставлят методы выделения/освобождения памяти, под какие-то нужды. Хранит в себе иформацию о положени/организации задействованной и свободной памяти, в таком плане. Ну, соответственно приходится делать override всех new/delete, чтобы они использовали мой манагер.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить длинну текста нескольких строк... Nater Общие вопросы Delphi 3 16.06.2010 15:55
Увеличить длинну выпадающего списка больше 8 строк agregator Microsoft Office Excel 5 17.12.2009 03:11
Как увеличить длинну выпадающего списка: ДАННЫЕ-ПРОВЕРКА-СПИСОК kay Microsoft Office Excel 3 10.02.2009 12:59
Найти все слова, отличающиеся от заданного на 1 букву и имеющую ту же длинну. gred Помощь студентам 5 23.05.2008 08:32
Как узнать размер массива мандарин Общие вопросы Delphi 2 30.05.2007 19:18