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

Почему std::string_view МЕДЛЕННЕЕ, чем std::string? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка C2864/C2758 http://www.cyberforum.ru/cpp-beginners/thread1754622.html
Собсна вот в чём проблема... Код писался на VS15 Community, проект был пересоздан на VS10 Ultimate Но вот беда, не хочет объявляться не статический int.. Кто сталкивался? Помогите. Ошибки на скриншотах, с кодом. Код "Linear.h": #pragma once #include "Progression.h" #include <time.h>
C++ Определить, сколько символов цифр содержит файл Извиняюсь за вопрос, но я просто не могу понять: 1) Как объяснить компилятору, что это именно число, а не буква? (предположительно через аску, но опять же как). 2) Как можно прочитать весь файл полностью, если там, допустим, 10 строк, а не 1? (предположительно через eof()). http://www.cyberforum.ru/cpp-beginners/thread1754620.html
C++ Ошибка компиляции проекта под linux
Здраствуйте. Пытаюсь скомпилировать проект в Cygwin, получается такой лог: $ make MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp. gcc -c -m32 -O3 -fPIC -w -DLINUX -Wall -I../SDK/amx/ ../SDK/amx/*.c g++ -c -m32 -O3 -fPIC -w -DLINUX -Wall -I../SDK/amx/ ../SDK/*.cpp In file included from ../SDK/amx/amx.h:28:0, from ../SDK/plugin.h:9, ...
C++ Умножытели: Математические операции с умножытелями
Ребята помогите написать програму до понедельника на тему: "Умножители: Математические операции с умножителями". Чесно говоря, у меня даже нет понятие ,как это делать. А у меня ещё куча работы по остальным предметам. И это все нужно срочно до понедельника. Заранее спасибо!
C++ Цикл с паузой http://www.cyberforum.ru/cpp-beginners/thread1754597.html
Вопрос простой до невозможности, но сколько бы я не искал его на английских форумах, на русских - нигде не нашел ответа. Как сделать цикл с паузой? sleep не работает. Что я хотел сделать - это цикл с паузой, который запускает функцию каждые 10 секунд. Почему без sleep? Потому что он ломает windows forms, из-за чего тот зависает и не реагирует на нажатия кнопок\изменения строк и т.д. Так...
C++ Ошибка error: call of overloaded Помогите разобраться с ошибкой, не хочет компилировать! ошибки не подчеркивает...)) подробнее

Показать сообщение отдельно
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
07.06.2016, 12:58     Почему std::string_view МЕДЛЕННЕЕ, чем std::string?
gromo,
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
83
84
85
86
87
88
89
90
#include <iostream>
#include <fstream>
#include <iomanip>
#include <unordered_set>
#include <chrono>
#include <iterator>
#include <string>
#include <algorithm>
#include <future>
#include <thread>
#include <experimental/filesystem>
#include <boost/spirit/include/qi.hpp>
 
namespace sc = std::chrono;
namespace qi = boost::spirit::qi;
 
std::unordered_set<int> MTVersion()
{
    const static char* fileName = "/home/xxx/random_values";
    std::ifstream file(fileName);
    if (file)
    {
        auto start = sc::high_resolution_clock::now();
 
        const auto fileSize = std::experimental::filesystem::file_size(
                fileName);
 
        std::istreambuf_iterator<char> begFile { file };
        std::istreambuf_iterator<char> endFile;
        std::string fileBuf;
        fileBuf.reserve(fileSize);
        fileBuf.insert(fileBuf.begin(), begFile, endFile);
        file.close();
 
        std::vector<std::future<std::unordered_set<int>>>vecOfFut;
 
        const auto threadCount = std::thread::hardware_concurrency();
        auto threadOffset = fileBuf.size() / threadCount;
        double threadOffsetDelta = threadOffset / threadCount;//на глазок :)
        auto beginIt = fileBuf.begin();
        auto endIt = fileBuf.begin();
 
        size_t backetCount = 1024 * 1024 * 10;
 
        double i = threadCount;
        while (--i)
        {
            endIt = std::find(
                    beginIt + threadOffset
                            - static_cast<size_t>((i - threadCount / 2.0)
                                    * threadOffsetDelta), fileBuf.end(), '\n');
 
            vecOfFut.push_back(
                    std::async(std::launch::async,
                            [=](std::string::iterator begin,std::string::iterator end)
                            {
                                std::unordered_set<int> ret;
                                qi::parse(begin, end, qi::int_ % qi::eol, ret);
 
                                return ret;
                            }, beginIt, endIt));
 
            beginIt = ++endIt;
        }
        std::unordered_set<int> hashSet(backetCount);
        for (auto& fut : vecOfFut)
        {
            auto set = fut.get();
            hashSet.insert(std::begin(set), std::end(set));
        }
        auto end = sc::high_resolution_clock::now();
 
        std::cout << "+-----------------------------------------+\n"; // 43 chars
        std::cout << std::setw(25) << std::left << "|    Unique elements:"
                << "< " << hashSet.size() << " >\n"
 
                << std::setw(25) << std::left << "|    Elapsed time:" << "< "
                << sc::duration_cast<sc::milliseconds>(end - start).count()
                << "ms >" << std::endl;
        std::cout << "+-----------------------------------------+\n";
 
        return hashSet;
    }
    throw std::runtime_error("Error opening file");
}
 
int main()
{
    MTVersion();
}
Должен отметить, что полученное ускорение по сравнению с чтением строк, это не заслуга spirit'a, это заслуга std::unordered_set<int> вместо std::unordered_set<std::string>, ну и копеечка от спирита, если сравнивать между std::istream(буферезированный конечно аля stringstream) >> TOINT и qi::int_. Но если же мы сделаем граммматику такой : *(qi::char_ - qi::eol) % qi::eol и соответственно поменяем контейнер, то ускорения уже не будет. Т.е. *(qi::char_ - qi::eol) % qi::eol в лучшем случае будет "делать" тоже самое что и std::getline.
 
Текущее время: 02:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru