Форум программистов, компьютерный форум CyberForum.ru

Как оптимизировать обращение к элементам вектора? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запустить цикл с контрольной точки http://www.cyberforum.ru/cpp/thread1551828.html
Всем доброго времени суток! Задача. Имеется просто двухмерный массив. Он проганяется в цыкле и выводится на экран значения. Допустим у нас int ; i = 100; j = 100 Прошла половина цикла(50, 50) и в файл прога записала контрольную точку, что i = 50; j = 50. Програмка закрывается и вопрос, как восстановить цикл с этой контрольной точки? Тоесть я запускаю прогу через свитч выбираю запустить...
C++ Как определить тип файла? Хочу написать программу, которая из кучи различных файлов в папке удаляет файлы определённого типа, но вот проблема возникла, не знаю как вытащить этот тип, если с txt файлами всё понятно, просто определить где последняя точка, то в других файлах нужно зайти в свойства и там посмотреть этот тип (так как в конце названия он не указан). Подскажите пожалуйста как это реализовать или дайте... http://www.cyberforum.ru/cpp/thread1551826.html
Разработать программу расчета комбинаций C++
Помогите пожалуйста. Всю суть я постарался изложить на картинке П.5.18. Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. На просторах форума нашел вот такой код для генерации комбинаций, если как-то поможет отталкиваться от него. #include <iostream> #include <clocale> using namespace std;
Работа с фреймом C++
Ребята, вообщем я создал проект, и создал два фрейма, разместил их на форме, и поставил чтобы отображалась 1 фрейм. На 1 фрейме находится кнопка, на которую я должен нажать, и должен отобразится второй фрейм... Не получается(( Я пишу вот так void __fastcall TFrame2::Button3Click(TObject *Sender) { Frame3->BringToFront(); }
C++ Как при достижении определенного размера файла закрыть его http://www.cyberforum.ru/cpp/thread1551795.html
Доброй ночи! Сново я со своими вопросами.... Есть вечный цикл. Он себе работает и заполняет файлик букафками "а". Хочу при достижении определенного размера закрыть его. Немного погуглил и узнал, как узнать размер файла. Вот кодесс. fin.seekg(0, std::ios::end); size = fin.tellg();
Assembler Перевести из с++ в asm int Sum(int x, int n, int nmin, int nmax) { int i; int s = 1; for (i = 0; i < n; i++) if (x < nmin || x >nmax) { s *= x; } return s; } Как эту функцию перевести в ассемблер? подробнее

Показать сообщение отдельно
AlexVRud
420 / 149 / 37
Регистрация: 04.07.2014
Сообщений: 421
14.10.2015, 16:36     Как оптимизировать обращение к элементам вектора?
1. Замени name на перечисление. Сравнивать числа быстрее чем строки.
2. Судя по (*it)->x у тебя указатель на указатель. Это может быть очень медленно.
3. У тебя классы, так пользуйся ими по полной, реализованные функции внутри объявления являются inline, т.е. их код будет вставлен в места использования. Это упрощает читабельность кода, например:
C++
1
2
    if (it->species() == Animal::Sheep && it2->species() == Animal::Wolf && it->see(*it2) )
      it->escape(*it2);
читается и пишется легче.
Кликните здесь для просмотра всего текста

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <vector>
#include <cmath>
 
/*
if((*it)->name=="Sheep" && (*it2)->name=="Wolf")
if(abs((*it)->x-(*it2)->x)<(*it)->SeeSheepRadius && abs((*it)->y-(*it2)->y)<(*it)->SeeSheepRadius){
   if((*it)->x<(*it2)->x) (*it)->dx = -0.01; else (*it)->dx = 0.01;
   if((*it)->y<(*it2)->y) (*it)->dy = -0.01; else (*it)->dy = 0.01;
}
*/
 
 
class Animal {
public:
  enum Species {
    Wolf,
    Sheep
  };
 
  Animal(Species species, double x, double y, double dx, double dy,
         double speed, double review_radius)
    : species_(species),
      x_(x), y_(y), dx_(dx), dy_(dy),
      speed_(speed), review_radius_(review_radius)
  {}
 
  Species species() const { return species_; }
  
  void setPosition(double x, double y)
  {
    x_ = x; y_ = y;
  }  
  double x() const { return x_; };
  double y() const { return y_; };
 
  void setOffset(double dx, double dy)
  {
    dx_ = dx; dy_ = dy;
  }  
 
  double dx() const { return dx_; };
  double dy() const { return dy_; };
 
  void setReviewRadius(double review_radius)
  {
    review_radius_ = review_radius;
  }
 
  bool see(const Animal& animal) {
      return (fabs(x_ - animal.x_) < review_radius_) &&
             (fabs(x_ - animal.x_) < review_radius_);
  }
  
  void escape( const Animal& animal) {
      dx_ = (x_ < animal.x_) ? -speed_ : speed_;
      dy_ = (y_ < animal.y_) ? -speed_ : speed_;
  }
 
private:
  Species species_;
  double x_;
  double y_;
  double dx_;
  double dy_;
  double speed_;
  double review_radius_;
};
 
int main() {
    std::vector<Animal> animals;
    animals.push_back(Animal(Animal::Sheep, 0.2, 0.1, 0.0, 0.0, 0.01, 1.0));
    animals.push_back(Animal(Animal::Wolf, 0.0, 0.0, 0.0, 0.0, 0.1, 1.0));
    Animal *it = &animals[0];
    Animal *it2 = &animals[1];
    
    if (it->species() == Animal::Sheep && it2->species() == Animal::Wolf && it->see(*it2) )
      it->escape(*it2);
    
    std::cout << animals[0].dx() << std::endl;
    return 0;
}
 
Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru