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

Быстрый стек, с малым обьемом памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как считать строку? http://www.cyberforum.ru/cpp-beginners/thread84194.html
Зачем надо при считывания переменной типа string надо писать getline(cin, ...)? Зачем там cin? Разве там ожет быть что либо иное?
C++ Оценка времени работы Можете оценить время работы алгоритма? http://acm.timus.ru/problem.aspx?space=1&num=1100 - это задача, на которую он проходит По моему мнению это O( 3*(N+M) ), или просто O(N+M), где N - количество команд, M - количество задач #include <iostream> #define FOR(i,a,b) for (int i(a),_b(b); i < _b; ++i) int main() { http://www.cyberforum.ru/cpp-beginners/thread84187.html
C++ считывает текст из файла
Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.
В чём ошибка? C++
мне надо чтоб програма получив строку проверила её и если в ней есть двузначные числа выводила всю строку. что я не так сделал? #include "stdafx.h" #include "iostream" #include "cctype" using namespace std; int _tmain(int argc, _TCHAR* argv) { bool flag; char *c=new char;
C++ Вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть http://www.cyberforum.ru/cpp-beginners/thread84170.html
Как можно вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть?
C++ Постфиксная и префиксная форма инкремента и декремента. Само задание: Написать программу с примерами постфиксной и префиксной формами инкремента и декремента. Число вводится с клавиатуры. #include<iostream.h> #include<stdio.h> int main(int args) { //Вводим с клавиатуры значение a и вычисляем значения c и d int a; int c; int d; подробнее

Показать сообщение отдельно
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
10.01.2010, 17:52     Быстрый стек, с малым обьемом памяти
Я решил сделать так:
1. Не использовать string (едять память)
2. Не делать сравнение строк, а сравнивать только одну букву
3. Выделать память блоками
4. Убрать cout, cin

Я приложу код. Но он работает плохо. Я не знаю откуда он есть столько памяти!!!
Даже на этапе ИНИЦИАЛИЗАЦИИ
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
#include <stdio.h>
#include <malloc.h>
 
//#include <iostream>
//#include <sstream>
//#include <string>
//#include <algorithm>
 
#define BLOCK_SIZE 20
const int BLOCK_INT_SIZE = BLOCK_SIZE * sizeof(int);
 
//using namespace std;
 
class stack
{
public:
        stack()
        {
                pos = 0;
                length = 1; //ÎäèГ* áëîê âûäåëåГ*
                a = (int *) calloc (BLOCK_SIZE, sizeof(int));
        }
        ~stack(){}
        void push(int n)
        {
                if (pos == BLOCK_SIZE - 1)
                {
                     length ++; //ÄîáГ*âèëè ГҐГ№Вё îäèГ* áëîê
                     a = (int*)realloc( (void*)a, BLOCK_INT_SIZE*length); // Âûäåëèëè ГЇГ*ìÿòü
                     pos = 0; //Ïîçèöèÿ Г*Г* Г*Г*Г·Г*ëî
                }
                a[(length - 1)*BLOCK_SIZE + pos] = n;
                pos++; //Óâåëè÷èëè ïîçèöèþ Г*Г* 1
        }
        int pop()
        {
                if (pos == -1)
                {
                     length --; //ÓäГ*Г«Г*ГҐГ¬ áëîê
                     a = (int*)realloc( (void*)a, BLOCK_INT_SIZE*length); // ГђГ*ñïðåäåëèòü ГЇГ*ìÿòü
                     pos = BLOCK_SIZE - 1; //Ïîçèöèÿ Г*Г* Г*Г*Г·Г*ëî
                }
                pos--; //ÓìåГ*ГјГёГ*ГҐГ¬ ïîçèöèþ Г*Г* 1
                
                return a[(length - 1)*BLOCK_SIZE + pos];
        }
private:
        int* a; //ГЌГ*Г·Г*ëî Г¬Г*Г±Г±ГЁГўГ*
        int pos; //Г’ГҐГЄГіГ№Г*Гї ïîçèöèÿ
        int length; // ÄëèГ*Г*
};
 
int main()
{
        int n;
        scanf("%d",&n);
        stack a[1000];
        
        char temp[20]; // ÂðåìåГ*Г*Г*Гї ïåðåìåГ*Г*Г*Гї
        while (n--)
        {
                int d;
                scanf("%s",temp);
                scanf("%d",&d);
                if (temp[1] == 'U') // temp[1] ñîäåðæèò 'U' äëÿ pUsh èëè 'O' äëÿ pOp
                {
                        int dd;
                        scanf("%d",&dd);
                        a[d-1].push(dd);
                }
                else
                        //cout << a[d-1].pop() << endl;
                        printf("%d\n",a[d-1].pop());
        }
        
        
        system("pause"); //Error
        return 0;
}
Добавлено через 3 минуты
Говоря блоками я имею ввиду выделение на 20 чисел. Это уменьшит частоту вызова функций где-то на 1000 процентов. (Так она вызывалась на 20 чисел 10 раз (в среднем), теперь она вызывается один раз). Согласен, идет не очень удачный расход памяти.
По идее, я теряю максимум 20 чисел * 4 байта на число * 1000 кол-во стеков. Это 80 килобайт.
но откуда у меня такие потери памяти - не знаю((

Добавлено через 1 минуту
Как вообще отследить сколько памяти жрет прога?? Кроме диспетчера задач, котрый ахинею несет.
 
Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru