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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2013, 14:56   #41
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
Во-первых, причем тут Net
А почему не НЕТ? Тоже ЯП. С историей.


Цитата:
Сообщение от still_alive Посмотреть сообщение
Я тогда сейчас хаскелл запилю в тред.
Запилите. По мне - это более полезнее чем теоретические рассуждения на 4 листах выше.


Цитата:
Сообщение от still_alive Посмотреть сообщение
Во-вторых, тут передается емкость, по умолчанию равная 10 (а почему 10, а не 9? или 8? или 666?) Емкость - это ни разу не максимальный размер стека и тем более не размер стека. Емкость - это сколько элементов может находиться в стеке при текущем объеме выделенной памяти.
Ну захотели МСовцы 10 элементов иметь в пустом новеньком стэке. А может подошли к делу "по науке" и выделили на это дело пару лямов на исследования "какой начальный размер стэка будет хорош?". Не знаю. Взято из оригинала.


Цитата:
Сообщение от still_alive Посмотреть сообщение
Емкость - это ни разу не максимальный размер стека и тем более не размер стека. Емкость - это сколько элементов может находиться в стеке при текущем объеме выделенной памяти.
А кто сказал что это размер стэка?
Я например в условии задачи такого не наблюдаю. Я вообще это условие (конструктор для определения стека по его размеру) читаю как "пусть стэк сразу выделит столько места сколько мне надо. Чтобы не было не О(1) операций".


Цитата:
Сообщение от still_alive Посмотреть сообщение
В-третьих, добавление элемента в стек, когда массив уже заполнен, требует выделения нового куска памяти и копирования туда всех элементов - длительность этой операции зависит от кол-ва элементов в стеке.
Ну и что? Ну попадете Вы на это место в паре случаев из сотни другой запросов к стэку, и что?
Внутр.массив растет при необходимости. Тупо в два раза от имеющегося (у МС, который Вам не авторитет).
Добавление нового элемента - операция О(1) практически в 99.99% случаев.
А в оставшийся мизерный процент просходит создание нового массива и копирование в него старых элементов. Тут операция не О(1), да.
При обычном использовании стэка - практически все время стэк будет одного размера (я не знаю реальных задач для стэка где ТОЛЬКО запись в него идет).

Последний раз редактировалось simples; 13.10.2013 в 15:19.
simples вне форума Ответить с цитированием
Старый 13.10.2013, 15:31   #42
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от simples Посмотреть сообщение
А почему не НЕТ? Тоже ЯП. С историей.

Запилите. По мне - это более полезнее чем теоретические рассуждения на 4 листах выше.
Я к тому, что не стоит рассматривать другие языки и их особенности.

Цитата:
Сообщение от simples Посмотреть сообщение
Я вообще это условие (конструктор для определения стека по его размеру) читаю как "пусть стэк сразу выделит столько места сколько мне надо. Чтобы не было не О(1) операций".
Скорее "чтобы было как можно меньше не О(1) операций".

Цитата:
Сообщение от simples Посмотреть сообщение
Ну и что? Ну попадете Вы на это место в паре случаев из сотни другой запросов к стэку, и что?
Внутр.массив растет при необходимости. Тупо в два раза от имеющегося (у МС, который Вам не авторитет).
Добавление нового элемента - операция О(1) практически в 99.99% случаев.
А в оставшийся мизерный процент просходит создание нового массива и копирование в него старых элементов. Тут операция не О(1), да.
При обычном использовании стэка - практически все время стэк будет одного размера (я не знаю реальных задач для стэка где ТОЛЬКО запись в него идет).
Об этом уже речь в этой теме велась, в том числе и мной.
Стек может постоянно расти в многопоточной среде - когда одни потоки разгребают задачи из стека куда медленнее, чем другие потоки помещают их туда.
still_alive вне форума Ответить с цитированием
Старый 13.10.2013, 15:41   #43
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
Я к тому, что не стоит рассматривать другие языки и их особенности.
Никаких особенностей НЕТ не обсуждалось и не предлагалось для решения задачи ТС. В С++ - нет чего из описанного мной(класс,массив,копирование массива)?


Цитата:
Сообщение от still_alive Посмотреть сообщение
Об этом уже речь в этой теме велась, в том числе и мной.
Стек может постоянно расти в многопоточной среде - когда одни потоки разгребают задачи из стека куда медленнее, чем другие потоки помещают их туда.
Не вижу здесь проблемы стэка. Вижу проблему приложения.
simples вне форума Ответить с цитированием
Старый 13.10.2013, 16:24   #44
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

still_alive
Цитата:
Но что такое по сути дек? Это набор векторов. Чтобы при перераспределении памяти нужно было копировать не все элементы, а только часть.
поясни как дек тут поможет.
Мне кажется или вы дек с чем-то путаете?
дек - это обычная двусвязная очередь. От стека отличается лишь тем, что я могу элементы не только в начало, но и в конец впихивать. При "перераспределении памяти" эта фича никак не поможет.


simples
Цитата:
Гм... а с каких пор добавление нового элемента в массив - НЕ О(1) операция?
с тех пор, как будет достигнут конец массива
Цитата:
По мне - это более полезнее чем теоретические рассуждения на 4 листах выше.
По мне так вы не осилили рассуждения на 4 листах выше, поэтому начали опять генерировать какой-то бред.
Цитата:
При обычном использовании стэка - практически все время стэк будет одного размера (я не знаю реальных задач для стэка где ТОЛЬКО запись в него идет).
расскажи нам, что значит "обычное использование стека".


still_alive
Цитата:
Стек может постоянно расти в многопоточной среде - когда одни потоки разгребают задачи из стека куда медленнее, чем другие потоки помещают их туда.
стек может расти в любой среде.
rrrFer вне форума Ответить с цитированием
Старый 13.10.2013, 16:44   #45
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Не вижу здесь проблемы стэка. Вижу проблему приложения.
Проблемы, не проблемы - это отдельный разговор. Я привел реальный пример, когда стек может расти.

Цитата:
стек может расти в любой среде.
А где я говорил, что он растет ТОЛЬКО в многопоточной среде?

Цитата:
поясни как дек тут поможет.
Мне кажется или вы дек с чем-то путаете?
дек - это обычная двусвязная очередь. От стека отличается лишь тем, что я могу элементы не только в начало, но и в конец впихивать. При "перераспределении памяти" эта фича никак не поможет.
Не двусвязная, а двусторонняя. Объясняю, чем поможет. В STL дек реализуется не как один массив, в котором хранятся все элементы, а как набор блоков - массивов меньшего размера. Когда я вставляю новый элемент, а памяти уже не хватает, я просто выделяю память под новый блок. И тогда вообще никакого копирования элементов не происходит.
still_alive вне форума Ответить с цитированием
Старый 13.10.2013, 18:35   #46
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
с тех пор, как будет достигнут конец массива
Неужели? Кэп, это Вы? Вы про стэк сейчас пишите или про массив в котором закончилось место? Ничего не попутали?


Цитата:
Сообщение от rrrFer Посмотреть сообщение
поэтому начали опять генерировать какой-то бред
Пруф?


Цитата:
Сообщение от rrrFer Посмотреть сообщение
расскажи нам, что значит "обычное использование стека".
Это когда стэк на месте и он работает.

Последний раз редактировалось simples; 13.10.2013 в 18:38.
simples вне форума Ответить с цитированием
Старый 13.10.2013, 19:27   #47
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

simples
Цитата:
Неужели? Кэп, это Вы? Вы про стэк сейчас пишите или про массив в котором закончилось место? Ничего не попутали?
Ничего. С возрастом пройдет, может быть.

still_alive
Цитата:
А где я говорил, что он растет ТОЛЬКО в многопоточной среде?
нигде, но зачем вообще было упомянать многопоточную среду если он может расти в любой среде?
Цитата:
Объясняю, чем поможет. В STL дек реализуется не как один массив, в котором хранятся все элементы, а как набор блоков - массивов меньшего размера. Когда я вставляю новый элемент, а памяти уже не хватает, я просто выделяю память под новый блок. И тогда вообще никакого копирования элементов не происходит.
ну причем тут STL? я рад, что он в STL так реализуется, это здорово и интересно, но суть дека не в этом ведь. Суть его в том, что добавление и удаление элементов я могу производить в любой его конец и выполняются эти операции на О(1).
Цитата:
Не двусвязная, а двусторонняя.
как запилить двусторонюю, но не двусвязную очередь так, чтобы в любой конец я мог за О(1) добавить? - я не представляю.
rrrFer вне форума Ответить с цитированием
Старый 13.10.2013, 20:07   #48
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
нигде, но зачем вообще было упомянать многопоточную среду если он может расти в любой среде?
Да просто как пример.

Цитата:
Сообщение от rrrFer Посмотреть сообщение
ну причем тут STL? я рад, что он в STL так реализуется, это здорово и интересно, но суть дека не в этом ведь. Суть его в том, что добавление и удаление элементов я могу производить в любой его конец и выполняются эти операции на О(1).

как запилить двусторонюю, но не двусвязную очередь так, чтобы в любой конец я мог за О(1) добавить? - я не представляю.
Я же про STL не просто так сказал. Там как раз можно добавлять и удалять с обеих сторон и за O(1). Обеспечивается это тем, что первый и последний блоки растут в противоположных направлениях, только и всего.
still_alive вне форума Ответить с цитированием
Старый 13.10.2013, 21:29   #49
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Я же про STL не просто так сказал. Там как раз можно добавлять и удалять с обеих сторон и за O(1). Обеспечивается это тем, что первый и последний блоки растут в противоположных направлениях, только и всего.
Чтобы они росли в разных направлениях список должен быть двусвязным (список блоков). Иначе никак ведь.
rrrFer вне форума Ответить с цитированием
Старый 13.10.2013, 21:54   #50
maka42rus
Пользователь
 
Регистрация: 06.10.2013
Сообщений: 10
По умолчанию

Сделала такое задание: Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами. Предусмотреть функции сортировки вектора по возрастанию и нахождения среднего арифметического из элементов вектора. (только здесь вектор - одномерный массив, а мне нужен стек - двумерный. Никак не получается сделать! )
Код:
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<iostream>
using namespace std;

class Vector{
public:
	int size;
	int *data;
	Vector(int size) : size(size), data(new int [size]) {}
	~Vector() {delete[] data;}

	void srar(){
		float s=0;
		for(int i=0;i<size;i++){
			s+=data[i];}
	s=s/size;
	cout<<"\n\nSrednee arifmeticheskoe: "<<s;
	}

	void sort(){
		int bank=0;
		for(int j=0; j<50;j++){
			for(int i=1;i<size;i++){
				if(data[i]<data[i-1]){
					bank=data[i]; data[i]=data[i-1]; data[i-1]=bank;}}}
		cout<<"\n\nSortirovka po vozrastaniy:\n ";
		for(int i=0;i<size;i++)
			cout<<data[i]<<" ";
	}
};
int main() {
	int i, d;
	srand (time(NULL));
	cout<<"Vvedi razmer:"; cin>>d;
	Vector v1(d);
	for(i=0;i<v1.size;i++){
		v1.data[i]=rand()%100-50; cout<<v1.data[i]<<" ";}

	cout<<"\nCopy vector:\n";
	Vector copy=v1;
	for(i=0;i<copy.size;i++){
		cout<<copy.data[i]<<" ";}

	v1.sort();
	v1.srar();

	getch();
	return 0;
}
maka42rus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Определить пользовательский класс... BoCbMou C# (си шарп) 0 18.04.2012 12:59
задача - определить Класс Andrew_s Visual C++ 2 13.12.2011 22:58
Определить, создан ли класс. Alex Cones Общие вопросы Delphi 4 14.01.2010 18:12
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41