5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
1

Оптимизация работы метода класса с объектами класса [C++]

24.04.2012, 23:35. Показов 1382. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Я хочу сделать 25 000 объектов класса, в последствии они все будут разными, но сейчас, для упрощения задачи, я делаю их одинаковыми.
Собственно, вопрос в том, как это сделать быстро.
Приведённый ниже код, с использованием метода класса делает это ОЧЕНЬ долго.

Вот код:
C++
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
#include <iostream>
 
using namespace std;
 
int num=0;
 
void main()
{
    class tile
    {
    public:
        static tile change()
        {
            tile temp;
            temp.num=::num;
            temp.mapp='\xDB';
            return temp;
        }
    private:
            int num;
            char mapp;
    };  
    tile ti[25000];
    for(int i=0;i!=24999;++i)
    {
        ti[i] = tile::change();
        ++::num;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2012, 23:35
Ответы с готовыми решениями:

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог...

Реализуйте интерфейс динамической структуры list для работы с объектами класса А
Добрый день товарищи программисты. Столкнулся с задачей и никак не могу решить... Так вот...

Демонстрация работы с объектами класса Number
Cоздать абстрактный базовый класс Number с виртуальными методами - арифметическими операциями....

Как из другого класса управлять объектами класса Form1 ?
Добрый вечер, подскажите, пожалуйста. Создал форму Form1, создал отдельный класс (подписчик на одно...

13
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.04.2012, 00:02 2
быстро или медленно - это все понятия относительные. а оптимизация - вообще зло.
класс будет именно таким как тут? с парой меберов из встроенных типов?
очень долго относительно чего?
чем измеряли?
откуда такая подребность в быстром создании?
0
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
25.04.2012, 00:08  [ТС] 3
Ну, я хочу сделать двухмерную игру с псевдослучайной генерацией мира.
С возможностью удаления, изменения каждой "клетки".
У "клетки" есть свой номер, необходимый для той системы, которую я придумал, и знак отображения на экране (ASCII).
Я предполагал, что сначала все "клетки" будут одинаковыми, а потом уже будут перезаписываться, превращаться в элементы других классов, которые наследуются от этого класса.
Насчёт времени...
Я пять минут ждал, и процесс и не думал прекращаться.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.04.2012, 00:14 4
где-то у вас в другом месте проблема. тот код, который вы тут написали выполняется почти мнгновенно. именно такой код на общую производительность проекта не должен влиять. проблемы будут в других местах. а то, что у вас сейчас это 5 минут выполняется - это очень странно. вы наверно что-то напутали
1
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
25.04.2012, 00:19  [ТС] 5
Цитата Сообщение от DU Посмотреть сообщение
где-то у вас в другом месте проблема. тот код, который вы тут написали выполняется почти мнгновенно. именно такой код на общую производительность проекта не должен влиять. проблемы будут в других местах. а то, что у вас сейчас это 5 минут выполняется - это очень странно. вы наверно что-то напутали
Ох, действительно, я случайно вставил у себя в коде cout.
Боже, иногда ошибки бывают там, где их точно не ожидаешь ><

Ну да ладно, раз всё-таки я создал тему, не подскажите мне алгоритм создания кругов разных размерностей?
Где размерность - некое случайное число больше единицы.
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
25.04.2012, 00:23 6
чтобы было еще быстрее можно избавиться от change() и заменить ее конструктором по умолчанию
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.04.2012, 00:24 7
под размерностью имеется в виду радиус? или вам нужны n-мерные круги? ну генерите радиусы случайным образом. вот и будут круги с случайным радиусов. функия rand умеет генерить псевдослучайное число. если она не устраивает, нужно это отдельно в сети искать, как нагенерить что-то максимально случайно.
0
What a waste!
1607 / 1299 / 180
Регистрация: 21.04.2012
Сообщений: 2,728
25.04.2012, 00:24 8
Можно избежать лишних копий, в принципе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int num = 0;
 
int main() {
    class tile {
    public:
        tile() : num(::num++), mapp('\xDB') {}
        
    private:
        int num;
        char mapp;
    };
    
    
    tile t[25000];
    
}
Только непонятен смысл оптимизации такого крошечного кусочка кода. Да и ваш изначальный код вроде должен выполниться достаточно быстро.
1
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
25.04.2012, 00:27 9
наверно вам нужно что-то типа этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class tile
{
public:
  tile() : id(num), mapp('\xDB')
  {
      ++ num;
  }
 
private:
  int id;
  char mapp;
  static int num;
};
 
int tile::num = 0;
1
5 / 5 / 0
Регистрация: 04.01.2012
Сообщений: 41
25.04.2012, 00:33  [ТС] 10
Спасибо за ответы, я только начал работать с классами более плотно, на будущее буду знать

Цитата Сообщение от DU Посмотреть сообщение
под размерностью имеется в виду радиус? или вам нужны n-мерные круги? ну генерите радиусы случайным образом. вот и будут круги с случайным радиусов. функия rand умеет генерить псевдослучайное число. если она не устраивает, нужно это отдельно в сети искать, как нагенерить что-то максимально случайно.
Я имел в виду, по какой формуле делается круг, например, радиус его 8, и внутри он должен быть тоже "заполнен".
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
25.04.2012, 11:20 11
Цитата Сообщение от DU Посмотреть сообщение
а оптимизация - вообще зло.
Ха-ха-ха
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.04.2012, 13:21 12
Kuzia domovenok, Ничего смешного. Преждевременная оптимизация - зло. Оптимизация не по теме - тоже. Компилятор может оптимизировать куда лучше программиста.
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
25.04.2012, 17:42 13
Цитата Сообщение от ForEveR Посмотреть сообщение
Kuzia domovenok, Ничего смешного. Преждевременная оптимизация - зло. Оптимизация не по теме - тоже. Компилятор может оптимизировать куда лучше программиста.
тот кто это сказал, очевидно имел в виду мелкую оптимизацию по мелочам, вроде параноидальной замены всех умножений на сдвиги и сложения,
всех постинкрементов на преинкременты
и прочую мелкую ерунду.
Пользоваться же оптимальными высокоуровневыми алгоритмами надо всегда
И гораздо хуже будет, если после того как программа написана выясняется, что производительность недостаточна
и требуется заменить всё, начиная с основных типов данных
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.04.2012, 17:47 14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Пользоваться же оптимальными высокоуровневыми алгоритмами надо всегда
Сами алгоритмы надо оптимизировать, да.
Их реализацию - только когда код уже гарантированно работает и инкапсулирован от всего внешнего мира. До этого же лучше пессимизировать в пользу понятности кода, чем оптимизировать за счет этой же понятности.
Суть в том, что сделать из быстрого кода корректный намного сложнее, чем из корректного быстрый.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
всех постинкрементов на преинкременты
и прочую мелкую ерунду.
Замена постинкрементов на преинкременты - это хороший стиль и отсутствие пессимизации, а не оптимизация.
0
25.04.2012, 17:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2012, 17:47
Помогаю со студенческими работами здесь

Оптимизация работы класса
Нужно максимально, оптимизировать работу двух методов в классе. Возможно ли как-нибудь ускориться?...

Оптимизация работы класса
Написал класс который оперирует с числами в разных СС. Укажите на недостатки, на то что можно...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая:...

Передача значения переменной из метода одного класса в метод другого класса
Добрый вечер! Есть основная форма Form1 в которой есть метод private void button1_Click(object...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru