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

Помогите улучшить неведомую функцию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как оптимизировать обращение к элементам вектора? http://www.cyberforum.ru/cpp-beginners/thread1551850.html
Добрый день. Подскажите, пожалуйста, где я не прав. Есть класс, в нем координаты и другие параметры, описывающие существ (овцы и волки). Эти существа содержатся в векторе и в цикле проверяются между собой на разные условия: близость волков, поиск травы на карте, столкновение двух овец для размножения и т.д. Вот пример кода из цикла проверок. В данном случае, овца убегает от волка, если видит...
C++ Непонятное поведение программы при запросе к базе данных при запуске программы и выборе номера запроса 1 и 2 происходит вот такая вот ерунда не могу найти в чем причина #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <windows.h> #include <string.h> struct otdel_kadrov http://www.cyberforum.ru/cpp-beginners/thread1551844.html
C++ Игра "семь лунок": рекурсивная реализация
Привет всем. мне нужно написать программу которая решала бы следующую задачу: Вдоль линии расположено 7 лунок, в которых лежат справа - 3 черных и слева - 3 белых шара. Передвинуть черные шары на место белых, а белые - на место черных. Шар можно передвинуть либо в соседнюю с ним пустую лунку, либо в пустую лунку, находящуюся непосредственно за ближайшим шаром. Причем нужно сделать это...
C++ Задачи на с++!
Помогите решить вот эти задачи!
C++ Робот может перемещаться в четырех направлениях. Написать весь путь робота http://www.cyberforum.ru/cpp-beginners/thread1551383.html
Робот может перемещаться в четырех направлениях («С» — север, «З» — запад, «Ю» — юг, «В» — восток) и принимать три цифровые команды: 0 — продолжать движение, 1 — поворот налево, –1 — поворот направо. Дан символ C — исходное направление робота и целое число N —посланная ему команда. Вывести направление робота после выполнения полученной команды. Написал код используя switch #include...
Программирование игр и графики Overlay: Создание для OpenGL и D3D Итак. Знаю, что этот вопрос поднимался неоднократно, провёл несколько дней в поисках материалов по данному вопросу. Опишу свою ситуацию. Что есть: Есть приложение, выводящее графику. Возможен вывод как при помощи OpenGL, так и при помощи D3D. Кажется, возможно использования только DX6 и DX7, точнее не могу сказать на данный момент. Реализовать мне нужно всё, но начать хотелось бы, пожалуй, с... подробнее

Показать сообщение отдельно
NoobCPP11
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 15

Помогите улучшить неведомую функцию - C++

14.10.2015, 14:58. Просмотров 277. Ответов 5
Метки (Все метки)

Помогите найти хорошую реализацию!!!! Если вам не понятно что делает функция тогда игнорируйте данную тему. А кто понял жду, может кто и поможет реализовать. (пишу в Ubuntu SDK на чистом с++11 без Qt libs)
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
// count вектора {1,2|,-127,5|,9..-2|,1,4} шагом 2 ; {1,2}=unsigned int ; {1,4}=unsigned int
void my_find_pp(vector<char> &mem, unsigned int &j){
    vector< iter_vec_c > vec;
    vector<char> a,b;
    iter_vec_c ivc;
    ivc.Iter=mem.begin();
    ivc.Data=vector<char>(1,0);
    vec.push_back(ivc);
 
    auto it=mem.begin()+j;
    bool flag=1;//1-значение не найдено, выполнить добавление в вектор \ 0-увеличить данные на 1-цу
    while(it<mem.end()){
        a.assign(it,it+j);
        for(auto &itv: vec){
            b.assign(itv.Iter,itv.Iter+j);
            if(a==b){
                flag=0;
                strpp(itv.Data,true);
                break;//цикл for уже не нужен т.к. нашли что искали
            }
        }
        if(flag){
            ivc.Iter=it;
            vec.push_back(ivc);
        }else flag=1;
        it+=j;
    }
    mycout(vec,j);
}//плохая реализация по времени
P.S. Map реализация памяти кушает слишком и возможно шаг в разы больше будет, допустим 128 или 54.

Добавлено через 3 часа 35 минут
a.assign(it,it+j);
b.assign(itv.Iter,itv.Iter+j);
Недавно мысль пришла зачем присваивать значение если и так они хранятся в векторе mem. Попробую "двигать" указатели предварительно скопировать указатель в другую переменную ("буфером" будет) как для "а" так и для "б". Как вы думаете это ускорит её или нет? Мне хочется чтобы функция работала за секунды а не минуты.
P.S. Печально что еще нет ответов. Хотя, знаю что функция странная.

Добавлено через 1 час 12 минут
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
// count вектора {1,2|,-127,5|,9..-2|,1,4} шагом 2 ; {1,2}=unsigned int ; {1,4}=unsigned int
void my_find_pp(vector<char> &mem, unsigned int &j){
    vector< iter_vec_c > vec;
    vector<char>::iterator a,b;
    iter_vec_c ivc;
    ivc.Iter=mem.begin();
    ivc.Data=vector<char>(1,0);
    vec.push_back(ivc);
 
    auto it=mem.begin()+j;
    bool flag=1;//1-значение не найдено, выполнить добавление в вектор \ 0-увеличить данные на 1-цу
    bool fnot=1;//1-равны \ 0-не равны
    while(it<mem.end()){
        for(auto &itv: vec){
            a=it;
            b=itv.Iter;
            for(unsigned int i=0;i<j;++i){
                if(++*a != ++*b){
                    fnot=0;
                    break;//цикл for уже не нужен т.к. не равны значения
                }
            }
            if(fnot){
                flag=0;
                strpp(itv.Data,true);
                break;//цикл for уже не нужен т.к. нашли что искали
            }else fnot=1;
        }
        if(flag){
            ivc.Iter=it;
            vec.push_back(ivc);
        }else flag=1;
        it+=j;
        if(it>=mem.end())clog<<"1)";
    }
    mycout(vec,j);
}//реализация по времени При шаге 8 за ~12 сек. ~6 мегабайт.
Как можно реализовать эту функция чтобы она еще быстрее работала? Гуру программирования отзовитесь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru