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

Структуры данных для хранения и работы с матрицами - 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>,...
Как передать функции через метод класса C++
Добрый вечер всем! Столкнулся с проблемкой К примеру у меня есть 3 функции.Я хочу в 4 функцию дать массив названий этих 3 функций,чтобы распределять в каких моментах их использовать.Ну вот как-то...
C++ что за тема такая to-do list? http://www.cyberforum.ru/cpp-beginners/thread935955.html
объясните плиз что это такое(ну смысл типо список дел?), точнее как этим грамотно пользоваться?
C++ Упражнение из книги Страуструпа для начинающих. Точность вычислений Добрый вечер. В конце одной из глав идёт след. упражнение: Модифицируйте класс Fct так, чтобы в нём был дополнительный аргумент, позволяющий контролировать точность. Сделайте тип этого аргумента... подробнее

Показать сообщение отдельно
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 миллисекунды (что-то самому не верится). Потестируй лучше.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru