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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 23:24   #11
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Цитата:
А самостоятельно? Логика Vector :: del лично мне недоступна, я даже не вполне понимаю, чего Вы хотели сделать такими действиями. "Если очередной элемент вектора равен удаляемому, скопировать его туда-то" - действие достаточно странное.
Дело в том, что я не вполне понимаю, а точнее, вполне не понимаю, как написать метод удаления (даже не конкретно этот, а все три). Просто не могу понять, там же нужно как-то по массиву двигаться... Вот я что-то совсем туплю.
Bitter_Schokolade вне форума Ответить с цитированием
Старый 05.04.2013, 11:08   #12
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Дело в том, что я не вполне понимаю, а точнее, вполне не понимаю, как написать метод удаления (даже не конкретно этот, а все три). Просто не могу понять, там же нужно как-то по массиву двигаться... Вот я что-то совсем туплю.
Удалить - никак. В том смысле, что удалить элемент из массива можно двумя способами: создать новый массив, поменьше, и скопировать в него всё кроме удаляемого - раз, или каким-то образом помечать элементы массива как "невидимые" - два. Советую первый способ - то есть, для удаления одного элемента создаёте новый массив и копируете в него элементы исходного, пропустив удаляемый.
И если не понимаете, что творится в коде, то, наверное, пора писать комментарии. Они бывают полезны, правда-правда.
Abstraction вне форума Ответить с цитированием
Старый 05.04.2013, 14:54   #13
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
для удаления одного элемента создаёте новый массив и копируете в него элементы исходного, пропустив удаляемый.
Вот! Я же помню, нам что-то про копирование говорили, но я вероятно не поняла, что куда копировать. Теперь понятно, спасибо!
Bitter_Schokolade вне форума Ответить с цитированием
Старый 05.04.2013, 16:22   #14
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

А еще такой вопрос тогда: какие конструкторы должен содержать класс Vector?
Bitter_Schokolade вне форума Ответить с цитированием
Старый 05.04.2013, 16:41   #15
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А еще такой вопрос тогда: какие конструкторы должен содержать класс Vector?
Конструктор без параметров и конструктор копии - обязательно (иначе компилятор создаст их за Вас, и скорее всего его творчество Вам не подойдёт).
Помимо этого - какие сочтёте нужным. Например, можно сделать конструктор, принимающий "обычный" массив элементов; конструктор, принимающий число элементов и дальше список из этих самых элементов; ещё чего-нибудь... Вам решать, в общем.
Abstraction вне форума Ответить с цитированием
Старый 07.04.2013, 13:57   #16
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Мозг кипит. Спасайте. Ну почему опять валится программа? Компилятор не ругается!

Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
using namespace std;

class Vector
{
	int size;
	char** v;
public: Vector ()
		{
			size = 0;	
			v = new char*[size];
			ishodnik();
		}
		void ishodnik () 
		{
			for (int i = 0; i<8; ++i)
			{
				add("Zapis'");
			}
		}

		char** add (char* s) {char** new_v = new char*[size+1];
		for (int i=0; i<size; ++i)
		{
			new_v[i] = v[i];
		}
		new_v[size] = s;
		v = new_v;
		delete[]new_v;
		++size;
		return (v);
		}

		char** del (char* s) 
		{
			char** new_v = new char*[size-1];
			for (int i = 0; i<size; --i)
			{
				if (s == v[i])
				{
					new_v [size-1] = s;
				}
				delete[]v;
				v = new_v;
				--size;
			}
			return (new_v);
		}

		char** delfrom (char* s) 
		{
			char** new_v = new char*[size-1];
			for (int i = 0; i<size; --i)
			{
				if (s == v[i])
				{
					new_v [size-1] = s;
					++i;
				}
				delete[]v;
				v = new_v;
				--size;
			}    
			return (new_v);
		}

		void delall (char* s) 
		{
			char** new_v = new char*[size-1];
			for (int i = 0; i<size; --i)
			{
				new_v [size-1] = s;
				++i;
			}
			delete[]v;
			v = new_v;
			--size;
		}

		void prrint()
		{
			for (int i = 0; i < size; i++)
			{
				for (int j= 0; j < sizeof(v[i])/sizeof(v[0]); j++)
				{
					cout<<v[i][j];
				}
				cout<<endl;
			}
		}
};

int _tmain(int argc, _TCHAR* argv[])
{
	char* str = "\0";
	cout<<"Vvedite zapis dlja dobavlenija v vector: "<<endl;
	cin.getline(str, 20);
	Vector* zap = new Vector();
	zap->add(str);
	zap->prrint();
	cout<<"Vvedite zapis dlja udalenija iz vectora: "<<endl;
	cin.getline(str, 20);
	zap->del(str);
	zap->prrint();
	cout<<"Vvedite zapis dlja udalenija iz vectora ego konza: "<<endl;
	cin.getline(str, 20);
	zap->delfrom(str);
	zap->prrint();
	cout<<"A teper udalim vse ostalnoe: "<<endl;
	zap->delall(str);
	zap->prrint();
	system ("pause");
	return 0;
}
Bitter_Schokolade вне форума Ответить с цитированием
Старый 08.04.2013, 17:24   #17
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
new_v[size] = s; //со строками так не работают. 

v = new_v; // после того, как это выполнено
		delete[]new_v; // это тоже самое что delete[] v;
		++size;
отформатируй код

Последний раз редактировалось rrrFer; 08.04.2013 в 17:27.
rrrFer вне форума Ответить с цитированием
Старый 17.04.2013, 22:11   #18
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Вот этот код должен работать, но в нем есть некая странная ошибка, подскажите, пожалуйста, какая???

Код:
#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

class String
{
      private:
              int dlina; //длина строки
              char *zap; //указатель на начало строки
      
      void Ishodnik(const char *str) 
      {
           Value = new char[dlina + 1];
           strcpy(Value, str);
      }
      
      public:
      String()
      {
		  dlina=0;
      }
      String(const char *s)
      {
	   dlina=strlen(s);
       cout<<"Zapisal stroku: "<<s<<endl;
       Ishodnik(s);
      }     
	  char *Value;
      void PrintStr()
      {
		  cout<<Value;
      }
};

class Vektor
{
      private:
			int size; //размер массива
			String *list; //указатель на первый элемент массива
              
			void Add(const String s)
			{
				String *new_list = new String[size+1];
				for (int i=0; i<size; ++i)
				{
					new_list[i] = list[i];
				}

				new_list[size] = s;				
				delete [] list;
				list = new_list;
			}
			  
			String* del (char* s) 
			{
				String* new_v = new String[size-1];
				for (int i = 0; i<size; --i)
				{
					if (s == list[i].Value)
					{
						new_v [size-1] = s;
					}
					delete[] list;
					list = new_v;
					--size;
				}
				return (new_v);
			}

			String* delfrom (char* s) 
			{
				String* new_v = new String[size-1];
				for (int i = 0; i<size; --i)
				{
					if (s == list[i].Value)
					{
						new_v [size-1] = s;
						++i;
					}
					delete[] list;
					list = new_v;
					--size;
				}    
				return (new_v);
			}

			void delall (char* s) 
			{
				String* new_v = new String[size-1];
				for (int i = 0; i<size; --i)
				{
					new_v [size-1] = s;
					++i;
				}
				delete[] list;
				list = new_v;
				--size;
			}

			
      public:
             Vektor(int kolvo)
             {
              size = kolvo > 0 ? kolvo : 10;
              list = new String[size];
              for (int i=0; i<size; ++i)
              {
                  char nomer [100];
                  _itoa(i, nomer, 10);
                  String s(nomer);
                  Add(s);
              }
             }
             void Dobavit(const String stroka)
             {
                  Add(stroka);     
             }
             virtual void Print()
    		 {
				 String s = "\0";
				for (int i = 0; i < size; i++)
				{
					String s = list[i];
					s.PrintStr();
					cout<<endl;
				}
    		 }
};

int main()
{
    int a=0;
    char* s0;
    s0 = new char[100];
    cout<<"Vvedi stroku: ";
    cin.getline(s0, 100);
    String s1(s0);
    cout<<"Sozdana stroka:";
    s1.PrintStr();
    
    cout<<endl;
    Vektor b(5);
    char* s;
    s = new char[100];
    cout<<"Vvedi stroku:";
    cin.getline(s, 100);
	String str(s);
    b.Dobavit(str);
    cout<<"Pe4at' zapisej: "<< endl;
    b.Print();
    cin>>a;
    system ("pause");
    return 0; 
      
}
Bitter_Schokolade вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собственный класс строк Amy_Lee Общие вопросы C/C++ 0 08.04.2012 17:27
свой собственный класс MediaPlayer'a nick17 Помощь студентам 2 26.11.2010 13:54
Delphi7,как создать собственный класс ? -ushёl- Общие вопросы Delphi 15 13.06.2010 01:02
Собственный класс диалогового окна на чистом WinApi в Delphi Iber Win Api 19 01.12.2008 15:40
Рисование многоугольника (собственный класс) MaTBeu Общие вопросы C/C++ 1 08.12.2007 14:53