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

Структуры данных для хранения и работы с матрицами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Изменение формы http://www.cyberforum.ru/cpp-beginners/thread936034.html
Подскажите пожалуйста как создаются такие формы?
C++ многопоточность приложения есть код #include <windows.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> int main() { http://www.cyberforum.ru/cpp-beginners/thread936020.html
C++ Начать работу с Active Directory
Доброго времени суток, уважаемые программисты! Хочу попробовать попогремировать на тему AD, с++, CodeBlocks - vs недоступна. Подскажите, пожалуйста, что необходимо инклудить? #include <windows.h>, #include <activeds.h>.. С последним проблемы, хотя в системных папках соответствующая длл есть. И в папку проекта бросал ее, не помогает. Что и немаловажно как! надо подключить, чтобы начать...
Как передать функции через метод класса C++
Добрый вечер всем! Столкнулся с проблемкой К примеру у меня есть 3 функции.Я хочу в 4 функцию дать массив названий этих 3 функций,чтобы распределять в каких моментах их использовать.Ну вот как-то так объяснил) К примеру у меня есть класс Меню в консоли.Я методом задаю список меню самого.Отдельно пишу функции,которые будут выполняться по нужному списку меню,и в еще одном методом,передаю...
C++ что за тема такая to-do list? http://www.cyberforum.ru/cpp-beginners/thread935955.html
объясните плиз что это такое(ну смысл типо список дел?), точнее как этим грамотно пользоваться?
C++ Упражнение из книги Страуструпа для начинающих. Точность вычислений Добрый вечер. В конце одной из глав идёт след. упражнение: Модифицируйте класс Fct так, чтобы в нём был дополнительный аргумент, позволяющий контролировать точность. Сделайте тип этого аргумента шаблонным параметром, чтобы повысить гибкость класса. Как понять "контролировать точность"? Подскажите, пожалуйста, что же имелось ввиду. Вот имеющийся код (класс Function): ... подробнее

Показать сообщение отдельно
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
10.08.2013, 21:55     Структуры данных для хранения и работы с матрицами
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
struct STMATRIX
{
 int rows;
 int cols;
 int bufferwidth;
 int bufferheight;
 unsigned char*data;
 STMATRIX();
~STMATRIX();
 void Create(int _rows, int _cols);
 int GetBufferSize();
 void DeleteRow(int _rowtodelete);//слишком легко
 void DeleteCol(int _coltodelete);
};
 
STMATRIX::STMATRIX()
{
 //ZeroMemory(this, sizeof(this));
};
 
STMATRIX::~STMATRIX()
{
 delete[]data;
};
 
int STMATRIX::GetBufferSize()
{
 return(bufferwidth*bufferheight);
};
 
void STMATRIX::Create(int _rows, int _cols)
{
 rows=_rows;
 cols=_cols;
 bufferheight=rows;
 bufferwidth=cols/8+1;
 data=new unsigned char[GetBufferSize()];
};
 
void STMATRIX::DeleteCol(int _coltodelete)
{
 unsigned char*pbyte=data+(_coltodelete/8);
 int bitnum=_coltodelete%8;
 
 BYTE mask1=255;  //бит bitnum и все биты старше ==1
 for(int i=0;i<bitnum;i++)
 {
  mask1^=1<<i;
 };
 BYTE mask2=mask1^(1<<bitnum);//вообще это лишнее, но мне так проще будет сориентироваться
                               //такаяже маска, только бит bitnum выключен
                               //то есть помечены только сдвигаемые биты
 while(pbyte<data+GetBufferSize())
 {
  //      <-биты младше удаляемого->     <-сдвигаемые биты->
  *pbyte=    (*pbyte)&(255^mask1)     |  ((*pbyte)&mask2)>>1;//кажется так
  //тепер нужно обработать остальную часть строки сдвигая вправо все биты
  //при чем если младший бит перед сдвигом вклюен, то у предыдущего байта нужно
  //включить старший бит, ну я думаю понятно почему
  unsigned char*pbyte2=pbyte+1;
  for(int i=_coltodelete/8+1;i<bufferwidth;i++)
  {
   if(*pbyte2&1)*(pbyte2-1)|=128;//сладший бит включен вкючаем старший у предыдущего
   *pbyte2=*pbyte2>>1;           //а в текущем сдвигаем всё
  };
  pbyte+=bufferwidth;          //к следующей строке!
 };
};
 
int main()
{
 
 STMATRIX m;
 m.Create(10000, 10000);
 for(int i=0;i<m.GetBufferSize();i++)
  m.data[i]=32;
 DWORD start=_GetTickCount();
 m.DeleteCol(5000);
 DWORD end=_GetTickCount();
 printf("%d ms", end-start);
 _getch();
}
Вот сырой вариант. Немного погонял в отладчике, вроде-бы работает как нужно, но неуверен. С матрицей 10000x10000 удаление 5000-го столбца заняло 22 миллисекунды (что-то самому не верится). Потестируй лучше.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru