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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
#1

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

20.11.2013, 03:45. Просмотров 300. Ответов 3
Метки нет (Все метки)

Измените структуру 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>
Посмотрите здесь:

Реализовать функции обращающие порядок следования элементов в объекте типа vector<int> - C++
Писал код,но никак не удавалось проделать механизм изменяющий порядок следования чисел в векторе.И как воспользоваться функцией...

Данные типа char не понимает кириллицу - C++
Имеется массив типа char. Ввод данных с клавиатуры. Когда пишу кирилиццей, то отображается аброкодабра. При вводе латиницей проблем нет....

Добавление в массив типа char * одного элемента типа char - C++
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

Аргумент типа char (*)[1000] несовместим с параметром типа char** - C++
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr { char s; int index; };

Запись в vector<vector<char>> - C++
Задача такова: Считать с нескольких разных файлов бинарным способом в vector&lt;vector&lt;char&gt;&gt; _data. Затем vector&lt;vector&lt;char&gt;&gt; _data...

Ошибка "аргумент типа char несовместим с параметром типа char*" - C++
#include &lt;iostream&gt; using namespace std; const int N=4; //размер очереди struct Queue { int data; //массив данных char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
854 / 752 / 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> и все . И не надо ничего больше
пример можно?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2013, 14:32     Измените структуру CStash чтобы данные хранились в объекте типа vector<char>
Еще ссылки по теме:

Не удаётся создать безымянный объект типа vector моего типа - C++
Собсно #include &lt;vector&gt; using namespace std; //Вот мой австорский тип struct kletka { int i, j; kletka(int x, int...

измените порядок следования элементов в массиве так,чтобы... - C++
помогите решать решение измените порядок следования элементов в массиве так,чтобы располагались все отрисательные элементы,затем...

Измените код так, чтобы мы сами вводили матрицу - C++
Измените код так, чтобы мы сами вводили матрицу. Заранее спасибо. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; ...

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" - C++
int f(unsigned char s, unsigned char q) { N = strlen(s); //Ошибка тут... M = strlen(q); //...и тут Как исправить?

Измените программу так, чтобы массив Y заполнялся значениями функции - C++
Измените программу так, чтобы массив Y заполнялся значениями функции. Огромное спасибо!

Измените программу, чтобы выводился список только тех студентов - C++
Измените программу, чтобы выводился список только тех студентов, у которых в) только хорошие и отличные оценки; Добавьте определение...


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

Или воспользуйтесь поиском по форуму:
MrCold
854 / 752 / 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>
Ответ Создать тему
Опции темы

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