Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Jovanna avatar Jovanna 186 Точки

C++ Advanced Task 5 - Memory

Здравейте,

как се вкарват int елементи във вектор от тип <char>, записват се всеки в 4 последователни байта и се третират като отделни char елементи на вектора ли? Как го позволява това компилатора, все пак са различни типове?

typedef unsigned char byte;

vector<byte> inputBytes;

                istringstream inputIn(input.str());

                int byteValue;

                while (inputIn >> byteValue) {

                               inputBytes.push_back(byteValue);

                }

 

Тагове:
0
C++ Programming 10/09/2018 13:03:27
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

 Не, push_back е функция, която приема тип какъвто е типа на вектора. Ако подадеш int на функция, която приема char, тогава int-ът бива cast-нат към char, съответно по-високите байтове ми се губят (ползва се само първия байт). След това push_back просто записва в поредната позиция. Същото е като да имаш char c = 15 - литералът 15 е int, обаче се каства към char и си остава 15. Същото е и ако имаш char arr[2]; int x = 65; arr[1] = 0; arr[0] = x; - ако изведеш arr[0] ще получиш 'А', ако изведеш arr[1] ще получиш 0.

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

Поздрави,

Жоро

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.