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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
#1

Оптимизация программы - C++

11.09.2013, 14:26. Просмотров 285. Ответов 6
Метки нет (Все метки)

Здравствуйте,задали задачку :Напишите программу, которая будет выполнять последовательность запросов вида ADD num, PRESENT num и COUNT (без параметра). Программу обязательно следует писать с использованием шаблонного типа set.
Я ее написал все работает правильно,но проблемка в том,что слишком долго выполняется,а именно 2.072 сек, когда должно долю секунды,подскажите что нужно изменить чтобы заработала быстрее,вот код:
C++ (Qt)
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
#include <iostream>
#include <set>
#include <string>
using namespace std;
 
 
int main(void)
{
  int num,N,r;
  string str;
  set<int> s;
  cin>>N;
  for (int i(0);i<N;i++)
  {
      cin>>str;
   if (str=="ADD") {cin>>num;  s.insert(num);}
   if (str=="PRESENT") {cin>>num;
       if (s.find(num)!=s.end())
          cout<<"YES\n";
      else
          cout<<"NO\n";}
   if (str=="COUNT") { r = 0;
 for(set<int>::const_iterator it = s.begin(); it != s.end(); it++) 
   r++;
 cout<<r<<endl;}
  }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
11.09.2013, 14:41     Оптимизация программы #2
Зачем использовать цикл, если можно написать s.size()? И вместо последовательных if лучше писать else if - производительности добавит совсем чуть-чуть (у вас каждая строка стравнивается по три раза, хотя это не всегда обязательно), но логически будет более верно.
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
11.09.2013, 15:01  [ТС]     Оптимизация программы #3
Цитата Сообщение от zenw Посмотреть сообщение
Зачем использовать цикл, если можно написать s.size()? И вместо последовательных if лучше писать else if - производительности добавит совсем чуть-чуть (у вас каждая строка стравнивается по три раза, хотя это не всегда обязательно), но логически будет более верно.
а не могли бы вы поподробнее рассказать о том как использовать здесь s.size?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
11.09.2013, 15:02     Оптимизация программы #4
Цитата Сообщение от zenw Посмотреть сообщение
вместо последовательных if лучше писать else if
тогда уж case должен придти на помощь
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,325
11.09.2013, 15:04     Оптимизация программы #5
case для строк?
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
11.09.2013, 15:05  [ТС]     Оптимизация программы #6
Цитата Сообщение от zenw Посмотреть сообщение
Зачем использовать цикл, если можно написать s.size()? И вместо последовательных if лучше писать else if - производительности добавит совсем чуть-чуть (у вас каждая строка стравнивается по три раза, хотя это не всегда обязательно), но логически будет более верно.
спасибо,разобрался с size,помогло.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 15:07     Оптимизация программы
Еще ссылки по теме:

C++ Оптимизация программы по памяти
C++ Оптимизация/Другой вариант программы
C++ Оптимизация программы нахождения медианы массива
Оптимизация программы для работы со списками C++
C++ Оптимизация программы

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

Или воспользуйтесь поиском по форуму:
Voivoid
671 / 274 / 12
Регистрация: 31.03.2013
Сообщений: 1,332
11.09.2013, 15:07     Оптимизация программы #7
Использовать unordered_set ( если есть )
Использовать сишные функции ввода-вывода ( scanf, printf и пр. )
Как уже сказали кол-во элементов получать через s.size()
Есть ли ограничение по диапазону чисел? Если есть, то возможно стоит использовать простой массив вместо set'а
Yandex
Объявления
11.09.2013, 15:07     Оптимизация программы
Ответ Создать тему
Опции темы

Текущее время: 13:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru