как реализовать очередь из массива char - PullRequest
0 голосов
/ 01 декабря 2010

Я хочу использовать контейнер STL, чтобы использовать его в качестве буфера, поэтому я определил что-то вроде этого:

typedef queue<char*> CHARQUEUE;

затем

CHARQUEUE p;

затем я сделал некоторые операциинапример:

p.push("mouse");
p.push("horse");

, но мне нужна очередь из массива char размером 256 байт для хранения данных.Можем ли мы определить что-то вроде этого:

typedef unsigned char newtype[256]
queue<newtype> newqueue;

Я использую неподписанный символ для хранения некоторых данных, которые я не хочу изменять.Просто чтобы поместить его в буфер и извлечь его снова.

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

Ответы [ 5 ]

3 голосов
/ 01 декабря 2010

для вашей очереди необработанных данных, просто определите

typedef unsigned char Byte;
typedef std::vector<Byte> ByteVector;
typedef std::queue< ByteVector > DataQueue;

для вашей очереди символьных строк, кстати, std::queue< std::string >, который другие предложили, подойдет

, кстати, ALL_UPPERCASE_NAMES лучше всего резервировать для макросов

cheers & hth.,

2 голосов
/ 01 декабря 2010

Используйте

std::queue<std::string>

EDIT:

Некоторые альтернативы.

std::queue<std::vector<char>>
std::queue<std::array<char, 256>>
1 голос
/ 01 декабря 2010

Использовать queue<string> CHARQUEUE;

Редактировать:

Если вы хотите хранить только указатели на некоторые внешние буферы, тогда используйте queue<const char*> CHARQUEUE;, но учтите, что это не приведет к копированию данных.

Если вы хотите сделать копии, используйте queue< vector<char> > CHARQUEUE;.

1 голос
/ 01 декабря 2010

Массивы не удовлетворяют требованию контейнеров stdlib (назначаемых и т. Д.) - используйте, например, тип массива boost (или тип из tr1 / c ++ 1x).

0 голосов
/ 01 декабря 2010

Вы можете использовать queue<boost::shared_array<const char>> (см. здесь ), чтобы сделать это, если вы хотите, чтобы содержимое было постоянным.

queue<boost::shared_array<const char>> queueArray;
const char mouse[] = "mouse";
boost::shared_array<const char> element(mouse);
queueArray.push(element);
...