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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2014, 16:59   #11
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Затрудняет восприятие. Когда программист видит вектор, он скорее всего думает, что тут не обычный массив потому, что элементы могут добавляться в рантайме
Наоборот, не затрудняет. Логичнее добавлять лошадок в рантайме. Три лошадки и не больше не меньше - это неправильно

Цитата:
Даже тем что компилировать будет дольше - хуже.
Есть такие-то исследования? Насколько дольше?

Цитата:
умные указатели работают медленнее, т.к. ведут подсчет ссылок и не только поэтому. Умные указатели реализуются через PIMPL, поэтому вместо обращения к указателю ты обращаешься к объекту который его хранит, который уже обращается к указателю. Т.е. выполняется каждый раз КАК МИНИМУМ одна лишняя операция. Подробнее про PIMPL читай у Майерса.
Это смешно, учитывая сколько пользы они приносят. Если мы можем примериться со скоростью, то выбор в пользу безопасного кода. Нечего писать new/delete там где можно использовать умные указатели. Могут возникнуть такие ситуации, где скорость будет критична, тогда да. Но лучше сразу писать безопасный код, а оптимизацию оставить на потом

Последний раз редактировалось 8Observer8; 09.11.2014 в 17:30.
8Observer8 вне форума Ответить с цитированием
Старый 09.11.2014, 18:24   #12
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Есть такие-то исследования? Насколько дольше?
А без исследований ты не понимаешь что дольше?
вектор - это шаблонный класс, поэтому если ты пишешь vector<Widget> то:
1) компилятор во время компиляции порождает новый класс (это время)
2) кроме времени увеличивается объем кода (размер исполняемого файла тоже).
3) большой размер программы негативно влияет на скорость ее работы (незначительно, но все равно)

Ну а еще, ветор - это не обычный массив. Оверхед там повсюду. Вектор ведь не просто массив.

Вот допустим, vector.at проверяет выход за границы вектора. Это хорошо и безопасно - ведь вектор кинет исключение, а не молча сломает все.
Но .at связан с еще большим оверхедом - ведь на каждое обращенипе к элементу он проверяет 2 дополнительных условия, как минимум.
Ты .at используешь или оператор [] обычно?

Цитата:
Это смешно, учитывая сколько пользы они приносят.
Если они приносят пользую - то да, смешно. В конкретно этом случае - не смешно, т.к. пользы - ноль.

Цитата:
Логичнее добавлять лошадок в рантайме. Три лошадки и не больше не меньше - это неправильно
Я написал выше, что если ты собрался добавлять в рантайме - юзай список, а не вектор. Если не добавлять - то обычный массив.

Последний раз редактировалось rrrFer; 09.11.2014 в 18:30.
rrrFer вне форума Ответить с цитированием
Старый 09.11.2014, 20:01   #13
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Я написал выше, что если ты собрался добавлять в рантайме - юзай список, а не вектор. Если не добавлять - то обычный массив.
Какая разница? При добавлении время тоже самое

По поводу остального - великий оптимизатор! Переходи на ассемблер или на Javа

Все эти копеечные затраты окупаются с лихвой временем, которое потратишь на поиск ошибки

Последний раз редактировалось 8Observer8; 09.11.2014 в 20:07.
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 02:45   #14
goshek
Пользователь
 
Регистрация: 07.01.2014
Сообщений: 33
По умолчанию

Попробую спросить по другому)
вот есть код
Код:
#pragma once

namespace HorseRacing {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Сводка для turtle
	/// </summary>
	public ref class turtle : public System::Windows::Forms::Form
	{
	public:
		turtle(void)
		{
			InitializeComponent();
			//
			//TODO: добавьте код конструктора
			//
		}

	protected:
		/// <summary>
		/// Освободить все используемые ресурсы.
		/// </summary>
		~turtle()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  button1;
	protected:
	private: System::Windows::Forms::Button^  button2;
	private: System::Windows::Forms::Button^  button3;
	private: System::Windows::Forms::Button^  button4;
	private: System::Windows::Forms::Button^  button5;

	private:
		/// <summary>
		/// Требуется переменная конструктора.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Обязательный метод для поддержки конструктора - не изменяйте
		/// содержимое данного метода при помощи редактора кода.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->button2 = (gcnew System::Windows::Forms::Button());
			this->button3 = (gcnew System::Windows::Forms::Button());
			this->button4 = (gcnew System::Windows::Forms::Button());
			this->button5 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(13, 13);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(75, 23);
			this->button1->TabIndex = 0;
			this->button1->Text = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(13, 71);
			this->button2->Name = L"button2";
			this->button2->Size = System::Drawing::Size(75, 23);
			this->button2->TabIndex = 1;
			this->button2->Text = L"Hourse2";
			this->button2->UseVisualStyleBackColor = true;
			this->button2->Click += gcnew System::EventHandler(this, &turtle::button2_Click);
			// 
			// button3
			// 
			this->button3->Location = System::Drawing::Point(13, 135);
			this->button3->Name = L"button3";
			this->button3->Size = System::Drawing::Size(75, 23);
			this->button3->TabIndex = 2;
			this->button3->Text = L"button3";
			this->button3->UseVisualStyleBackColor = true;
			// 
			// button4
			// 
			this->button4->Location = System::Drawing::Point(94, 12);
			this->button4->Name = L"button4";
			this->button4->Size = System::Drawing::Size(13, 146);
			this->button4->TabIndex = 3;
			this->button4->Text = L"START";
			this->button4->UseVisualStyleBackColor = true;
			// 
			// button5
			// 
			this->button5->Location = System::Drawing::Point(691, 13);
			this->button5->Name = L"button5";
			this->button5->Size = System::Drawing::Size(16, 145);
			this->button5->TabIndex = 4;
			this->button5->Text = L"FINISH";
			this->button5->UseVisualStyleBackColor = true;
			// 
			// turtle
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(712, 164);
			this->Controls->Add(this->button5);
			this->Controls->Add(this->button4);
			this->Controls->Add(this->button3);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Name = L"turtle";
			this->Text = L"turtle";
			this->Load += gcnew System::EventHandler(this, &turtle::turtle_Load);
			this->ResumeLayout(false);

		}
#pragma endregion
	private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
	}
	private: System::Void turtle_Load(System::Object^  sender, System::EventArgs^  e) {
	}
};
}
где мне начать писать int main, как в мэйне написать, чтобы хотя бы вызвать форму на экран?
goshek вне форума Ответить с цитированием
Старый 10.11.2014, 03:27   #15
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
По поводу остального - великий оптимизатор! Переходи на ассемблер или на Javа
Java тут при чем?

Цитата:
Какая разница? При добавлении время тоже самое
Иди книжки читай. При добавлении в вектор затраты по памяти больше в 2 раза, по времени - в N раз. (в худшем случае)
Еще учит тут ))
rrrFer вне форума Ответить с цитированием
Старый 10.11.2014, 10:27   #16
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Иди книжки читай. При добавлении в вектор затраты по памяти больше в 2 раза, по времени - в N раз. (в худшем случае)
Еще учит тут ))
Про память даже смешно говорить насколько больше

По времени - констрантное. Читай документацию. Почитай, когда и как происходит перераспределение памяти. И что такое "худший случай"
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 10:40   #17
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
По времени - констрантное. Читай документацию. Почитай, когда и как происходит перераспределение памяти. И что такое "худший случай"
Сам пройди по своей ссылке и прочитай:
Цитата:
Constant (amortized time, reallocation may happen).

If a reallocation happens, the reallocation is itself up to linear in the entire size.
Линейное время у вектора. Как я и пишу, в худшем случае.

Ты уныл и не интересен если не в состоянии прочитать то, на что ссылаешься )

Цитата:
Про память даже смешно говорить насколько больше
не НА сколько, а В 2 раза. Это разные предлоги.

Ну а если я не прав - расскажи мне что такое худший случай. Только своими словами, а не пруфами - с пруфами у тебя не получается.
rrrFer вне форума Ответить с цитированием
Старый 10.11.2014, 10:54   #18
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

У вектора добавление в конец: "amortized time". На тебя точно не буду тратить время. Вот здесь хорошо написано: http://stackoverflow.com/questions/2...amortized-time
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 11:16   #19
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
где мне начать писать int main, как в мэйне написать, чтобы хотя бы вызвать форму на экран?
Не понял. Вот вы создали проект . У вас уже есть форма, которая будет появлятся при запуске. Для начала, создайте новый проект и киньте на него кнопки. Дальше уже нужно создавать таймер и функцию, которая будет периодически вызываться по таймеру

P.S. К сожалению, кодом помочь не могу, так как в VS не делаю GUI. Если с Qt, то пожалуйста. Могу только общим советами помочь. Надеюсь, по конкретным вопросам по VS, кто-то здесь отпишиться
8Observer8 вне форума Ответить с цитированием
Старый 10.11.2014, 12:18   #20
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
У вектора добавление в конец: "amortized time". На тебя точно не буду тратить время.
Дак открой книжку, потрать время на себя .
В анализе алгоритмов выделяют как миниум 3 вариант - наилучший случай, наихудший случай и средний случай. Верхняя оценка наихудшего и среднего случаев для вектор - линейная. Наилучшего - константная.
Среднего линейная, потому что вектор расширяется рывками с фиксированным шагом, от N этот шаг не зависит. Поэтому средняя сложность - это что то типа (N+С)/C (где C - константа)
В пределе при N стремящемся к бесконечности - это N.

И еще раз:
Цитата:
По времени - констрантное. Читай документацию. Почитай, когда и как происходит перераспределение памяти. И что такое "худший случай"
Цитата:
У вектора добавление в конец: "amortized time". Вот здесь хорошо написано: http://stackoverflow.com/questions/2...amortized-time
1 Ты мне сказал - константная и отправил в документацию. В документации написано - линейная.
2 ты сказал разобраться с "наихудшим случаем" и опять отправил читать, но сам не разобрался
3 ты сказал "amortized time" (а ведь недавно говорил "константная"). и отправил читать, но сам не прочитал же опять - иначе бы не писал че попало. "amortized time" - это вообще не оценка сложности.

Я тебе грю, кончай раскидывать ссылки и писать RTFM. Сам ты не читаешь ведь
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КНОПКИ surf135 Общие вопросы Delphi 2 27.05.2012 22:39
Кнопки в Qt Tema_Crazzzy Qt и кроссплатформенное программирование С/С++ 6 20.11.2010 18:30
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35