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

Измените структуру CStash чтобы данные хранились в объекте типа vector<char> - C++

Восстановить пароль Регистрация
 
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
20.11.2013, 03:45     Измените структуру CStash чтобы данные хранились в объекте типа vector<char> #1
Измените структуру CStash чтобы данные хранились в объекте типа vector<char>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//hello.h
struct CStash{
    int size;
    int quantity;
    int next;
    unsigned char*storage;
};
 
void initialize(CStash* s, int sz);
int add(CStash*s, const void*element);
void * fetch(CStash*s, int index);
void inflate(CStash *s, int increase);
int count(CStash *s);
void cleanup(CStash *s);

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
//hello.cpp
#include"hello.h"
#include<iostream>
#include<cassert>
using namespace std;
 
const int increment=100;
 
void initialize(CStash* s, int sz){
    s->size=sz;
    s->quantity=s->next=0;
    s->storage=0;
}
 
int add(CStash*s, const void*element){
    if(s->next>=s->quantity) inflate(s,increment);
    int start=s->next*s->size;
    unsigned char * e=(unsigned char *)element;
    for(int i=0;i<s->size;i++)
        s->storage[start+i]=e[i];
    s->next++;
    return(s->next-1);
}
 
void * fetch(CStash*s, int index){
    assert(0<=index);
    if(index>=s->next) return 0;
    return &(s->storage[index*s->size]);
}
int count(CStash*s){
    return s->next;
}
void inflate(CStash *s, int increase){
    assert(increase>0);
    int NEWQ=s->quantity+increase;
    int NEWB=NEWQ*s->size;
    int OLDB=s->quantity*s->size;
    unsigned char * b= new unsigned char[NEWB];
    for(int i=0;i<OLDB;i++) b[i]=s->storage[i];
    delete [](s->storage);
    s->storage=b;
    s->quantity=NEWQ;
 
}
 
void cleanup(CStash *s){
    if (s->storage!=0){
    cout<<"free"<<endl;
    delete []s->storage;
    
    
    }
 
}
Буду рад если кто-то подскажет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 03:45     Измените структуру CStash чтобы данные хранились в объекте типа vector<char>
Посмотрите здесь:

C++ Не удаётся создать безымянный объект типа vector моего типа
C++ Данные типа char не понимает кириллицу
Измените программу, чтобы выводился список только тех студентов C++
C++ измените порядок следования элементов в массиве так,чтобы...
Аргумент типа char (*)[1000] несовместим с параметром типа char** C++
Измените код так, чтобы мы сами вводили матрицу C++
C++ Запись в vector<vector<char>>
Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" C++
C++ Ошибка "аргумент типа char несовместим с параметром типа char*"
Добавление в массив типа char * одного элемента типа char C++
C++ Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
C++ Реализовать функции обращающие порядок следования элементов в объекте типа vector<int>

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
20.11.2013, 05:29     Измените структуру CStash чтобы данные хранились в объекте типа vector<char> #2
Цитата Сообщение от helloy Посмотреть сообщение
Буду рад если кто-то подскажет
Просто Эту структуру заменить вектором vector<char> и все . И не надо ничего больше
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
20.11.2013, 13:30  [ТС]     Измените структуру CStash чтобы данные хранились в объекте типа vector<char> #3
Цитата Сообщение от MrCold Посмотреть сообщение
Просто Эту структуру заменить вектором vector<char> и все . И не надо ничего больше
пример можно?)
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
20.11.2013, 14:32     Измените структуру CStash чтобы данные хранились в объекте типа vector<char> #4
Не хочешь один вектор использовать ? не хочешь - не надо.
Цитата Сообщение от helloy Посмотреть сообщение
пример можно?)
Вот так можно, по моему компилируется
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
#include <iostream>
#include <vector>
 
struct CStash
{
 
    CStash();
    explicit CStash(int size);
    template<typename T>
    void  add( T * element, int LENGTH);
    void* fetch(  int index);
    int count();
    void cleanup();
    void print();
 
    int next;
    std::vector<unsigned char> storage;
};
 
 
 CStash::CStash() : next(0)
 {
    storage.reserve(1000);  
}
 
 CStash::CStash( int sz) : next(0)
 {
    storage.resize(sz);  
}
 
 void CStash::print()
{
    for( std::vector<unsigned char>::const_iterator it = storage.cbegin(); 
        it != storage.cend();
        it++)
    std::cout << *it << ' ';
}
 
 
template<typename T>
void  CStash::add( T* element, int LENGTH){
 
    for(int i = 0;i < LENGTH; i++)
        storage.push_back(element[i]);
    next++;
}
 
void* CStash::fetch( int index)
{
    return &storage.at(index);
}
int CStash::count()
{
    return next;
}
 
 
void CStash::cleanup()
{
      storage.clear();
       next = 0;
    }
    
 
int main( )
{
    int byteArray[] = {0x49,0x91,0x6E,0xDC};
    char chArray[] = "4A464946";
    CStash cstash;
        cstash.add(byteArray, sizeof(byteArray)/sizeof(byteArray[0]));
        cstash.add(chArray, sizeof(chArray)/sizeof(chArray[0]));
        cstash.print();
    
    std::cin.get();
    return EXIT_SUCCESS;
}
Yandex
Объявления
20.11.2013, 14:32     Измените структуру CStash чтобы данные хранились в объекте типа vector<char>
Ответ Создать тему
Опции темы

Текущее время: 12:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru