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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить номера строк, содержащих одновременно не менее трех четных элементов и ни одного нулевого http://www.cyberforum.ru/cpp-beginners/thread1551901.html
Здравствуйте,помогите найти ошибку. Мне нужно определить номера строк, содержащих одновременно не менее трех четных элементов и ни одного нулевого элемента. Вывести на экран исходную матрицу и...
C++ Естественная сортировка слияния Имеется N человек и целые числа А1, ..., AN; человека i необходимо познакомить с Аi*людьми. Можно ли это сделать? Кого с кем знакомить, чтобы это сделать? Собственно условие задачи, не... http://www.cyberforum.ru/cpp-beginners/thread1551858.html
Как задать переменную в C++ которая принимает комплексное значение? C++
Здравствуйте. Как объявить переменную, которая потом при расчетах принимает комплексный вид?
C++ Непонятное поведение программы при запросе к базе данных
при запуске программы и выборе номера запроса 1 и 2 происходит вот такая вот ерунда не могу найти в чем причина #include "stdafx.h" #include <stdio.h> #include <conio.h> #include...
C++ Запустить цикл с контрольной точки http://www.cyberforum.ru/cpp-beginners/thread1551828.html
Всем доброго времени суток! Задача. Имеется просто двухмерный массив. Он проганяется в цыкле и выводится на экран значения. Допустим у нас int ; i = 100; j = 100 Прошла половина цикла(50, 50)...
C++ Как определить тип файла? Хочу написать программу, которая из кучи различных файлов в папке удаляет файлы определённого типа, но вот проблема возникла, не знаю как вытащить этот тип, если с txt файлами всё понятно, просто... подробнее

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

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

14.10.2015, 14:58. Просмотров 290. Ответов 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 мегабайт.
Как можно реализовать эту функция чтобы она еще быстрее работала? Гуру программирования отзовитесь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru