Профил
Loading...
+ Нов въпрос
Vankata83 avatar Vankata83 72 Точки

Task 5 Memory

Здравейте

Каква трябва да е сигнатурата на метода readCompaniesFromMemory в COMPANYMEMORYUTILS хедъра ?

Нещо съвсем се оплетох на тази задача :)

Този ред от мейна явно ме бърка: byte* memory = new byte[inputBytes.size()];

Ясно, че е заделяне на динамична памет, но не знам как точно да приема memory в метода.

 

Тагове:
0
C++ Advanced
Filipbg avatar Filipbg 9 Точки

Заповядай пример на функцията. Надявам се да е от полза 

#ifndef COMPANY_MEMORY_UTILS_H
#define COMPANY_MEMORY_UTILS_H

#include "Company.h"
using namespace std;

typedef unsigned char byte;

vector<Company> readCompaniesFromMemory(byte* memory, int numOfCompanies)
{
    vector<Company> allCompanies;
    for(int i = 0; i < numOfCompanies; ++i)
    {
        unsigned char idd = (*memory);
        int id = (int)idd;
        vector<char> namee;
        while(memory++)
        {
            if((*memory) != '\0' || (*memory) != 0)
                namee.push_back((*memory));
            else
                break;
        }
        string name;
        for(int k = 0; k < namee.size(); ++k)
		{
            name += namee[k];
		}
        ++memory;
        int numOfEmployees = (int)(*memory);
        vector<pair <char, char>> employeeNames;
        for(int k = 0; k < numOfEmployees; ++k)
        {
            ++memory;
            char first = toupper((*memory));
            ++memory;
            char second = toupper((*memory));
            employeeNames.push_back(pair <char, char> {first, second});
        }
        Company comp(id, name, employeeNames);
        allCompanies.push_back(comp);
        ++memory;
    }
    return allCompanies;
}
#endif // !COMPANY_MEMORY_UTILS_H

 

0
zzerro avatar zzerro 14 Точки

Считай го сякаш е най-обикновен масив, все едно

byte memory[]

 

А, дали функцията ще го тълкува като пойнтер(както е показал @Filipbg) или като  масив, е все едно. Обърни внимание, че името на масива е всъщност константен пойнтер към първия му елемент. Затова и двата начина ще работят еднакво(но достъпът през пойнтер е по-бърз от достъпа през индекси):

vector<Company> readCompaniesFromMemory(byte* memory, int numOfCompanies);


vector<Company> readCompaniesFromMemory(byte memory[], int numOfCompanies);

 

0
02/12/2019 20:02:07
Vankata83 avatar Vankata83 72 Точки

Благодаря на всички.

В крайна сметка се оказа нещо доста тъпо написано от моя страна, за да не мога да си рънна кода. Инициализирам вектора, който ще връщам с размер, който въобще не му е мястото там ;)

Както и да е :)

Благодаря за отговорите.

0