С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
1

Скорость выполнения программы

04.06.2018, 17:52. Показов 1465. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Решил задаться таким вопросом. Какой из вариантов удаления цифр из строки в коде ниже будет работать быстрее? Будет ли третий вариант использования, например, STL работать быстрее, чем предложенные два? Почему?

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
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    string s1, s2, s = "";
    //Вариант 1
    cout << "Enter a string. Use digits:\n";
    getline(cin, s1);
    for (int i = 0; i < s1.size(); i++) {
        if (isdigit(s1[i])) {
            s1.erase(i, 1);
            i--;
        }
    }
    cout << "Target string:\n" << s1 << "\n";
    //Вариант 2
    cout << "\nEnter a string. Use digits:\n";
    getline(cin, s2);
    for (int i = 0; i < s2.size(); i++) {
        if (!isdigit(s2[i])) {
            s += s2[i];
        }
    }
    cout << "Target string:\n" << s << "\n";
    system("pause");
    return 0;
}
Будет ли строка s варианте 2 накапливаться быстрее, если
C++
1
s += s2[i];
заменить на
C++
1
s.push_back(s2[i]);
? В языке Java подобные замены (функция append()) значительно ускоряют ход выполнения программы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2018, 17:52
Ответы с готовыми решениями:

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

От чего зависит скорость выполнения программы?
от чего больше всего зависит скорость выполнения программы?

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

Скорость выполнения.
Есть консольное приложение, работающее с огромными текстовыми файлами, сравнивает их, читает,...

11
2859 / 2006 / 988
Регистрация: 21.12.2010
Сообщений: 3,711
Записей в блоге: 10
04.06.2018, 18:06 2
второй вариант намного быстрее (а в release вообще не тратит времени)
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
#include <iostream>
#include <string>
#include <cctype>
#include <ctime>
 
 
int main() 
{
    std::string s1, s2, s3;
    for (int i = 0; i < 300'000; ++i)
    {
        s1 += '1';
        s2 += '1';
    }
 
    auto t1 = clock();
    for (int i = 0; i < s1.size(); ++i) 
    {
        if (isdigit(s1[i])) 
        {
            s1.erase(i, 1);
            --i;
        }
    }
    auto t2 = clock();
 
    for (int i = 0; i < s2.size(); ++i) 
    {
        if (!isdigit(s2[i])) 
        {
            s3 += s2[i];
        }
    }
    auto t3 = clock();
 
    std::cout << t2 - t1 << std::endl;
    std::cout << t3 - t2 << std::endl;
}
разметка на форуме не дружит с новым стандартом
1
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
04.06.2018, 18:08 3
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Какой из вариантов ниже будет работать быстрее?
А заюзать таймер и провести ряд тестов - это слишком просто, да? (таймер только нормальный, который считает время работы потока, без учета простоя на ожидание кванта времени)
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
04.06.2018, 18:13  [ТС] 4
SuperKir, спасибо за ваш ответ. Никогда раньше такие тесты не проводил. Не знал как это правильно делается.

Добавлено через 1 минуту
igorrr37, спасибо большое.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.06.2018, 18:19 5
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Какой из вариантов удаления цифр из строки в коде ниже будет работать быстрее?
у вас там всего один единственный вариант.

полагаю, из представленных вариантов
он у вас самый быстрый.

Цитата Сообщение от Fixer_84 Посмотреть сообщение
удет ли строка s варианте 2 накапливаться быстрее, если
нет.

Добавлено через 6 минут
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Не знал как это правильно делается.
строго говоря так тесты не делают.
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
04.06.2018, 18:24  [ТС] 6
Цитата Сообщение от hoggy Посмотреть сообщение
будет ли строка s варианте 2 накапливаться быстрее, если
нет.
Спасибо.
0
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
04.06.2018, 19:33 7
Оба варианта так себе.
C++
1
2
3
4
int j = 0;
for (int i = 0; i < size; i++)
  if (!isdigit(s[i])) s[j++] = s[i];
s.resize(j);
std::remove_if примерно так и работает

Добавлено через 1 минуту
То что второй вариант быстрее и так понятно - пора бы уже научиться в сложность алгоритмов, хотя бы интуитивно. В первом варианте 100500 раз будет сдвиг из-за удаления, во втором варианте сдвигов нет, но дополнительная память тратится.
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
04.06.2018, 20:04  [ТС] 8
Новичок, я слышал, что некоторые программисты (в том числе в индустрии) иногда запрашивают реализацию каких-либо встроенных функций и методов, чтобы убедиться в их правильности и/или достоверности. Вы не знаете, есть ли такая возможность в С++ и чем лучше руководствоваться при подобных проверках?
0
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
04.06.2018, 20:14 9
Цитата Сообщение от Fixer_84 Посмотреть сообщение
каких-либо встроенных функций и методов, чтобы убедиться в их правильности
Встроенные это те которые входят в стандартную библиотеку?
0
1584 / 1507 / 251
Регистрация: 19.02.2010
Сообщений: 4,069
04.06.2018, 20:21 10
Fixer_84, В продвинутые (неначальные = не самые простые комплектации) версии сред разработки могут быть включены исходники библиотек (как стандартных Сишных, так и библиотек классов).
Т.е. просто изучайте комплектность поставок у Starter/Pro/Enterprise-версий среды (названия версий привёл для ембаркадеровского С++ Билдера, у Студии как-то иначе м.б.). Где будут исходники - ту комплектацию и покупайте/доставайте.
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
04.06.2018, 20:22  [ТС] 11
Новичок, просто хотелось бы знать хороший справочник по реализациям тех или иных функций (можно и STL). Говорят это тоже полезно, просматривать коды профессионалов
0
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
04.06.2018, 20:23 12
Цитата Сообщение от igorrr37 Посмотреть сообщение
не тратит времени
чоооооооооооооо?
0
04.06.2018, 20:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2018, 20:23
Помогаю со студенческими работами здесь

Скорость выполнения операторов
Привет всем. У меня есть задачка с которой не могу справится, она очень простая но функций с...

Скорость выполнения delete
Всем привет! Интересует почему скорость выполнения деструктора зависит нелинейно от объёма...

Скорость выполнения, а так же работа с дв. файлами
Здравствуйте. У меня есть несколько вопросов, на которые я уже давненько ищу ответы, а именно : ...

Как реализовать задержку выполнения определённой части программы без полной задержки всей программы?
Ниже представлен упрощённый код игры, в которой герой управляется ПКМ и подбирает предметы ЛКМ,...


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

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