如何实现char数组的队列

时间:2010-12-01 14:30:51

标签: c++ stl queue

我想使用STL的容器将其用作缓冲区,所以我定义了这样的东西:

typedef queue<char*> CHARQUEUE;

然后

CHARQUEUE p;
然后我做了一些操作,如:

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

但我想要的是一个256字节的char数组队列,以保存数据。我们可以定义这样的东西:

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

我正在使用unsigned char来保存一些我不想改变的数据。只是把它放在缓冲区并再次检索它。

否则如果有人有其他实施,我会很感激。

5 个答案:

答案 0 :(得分:3)

为您的原始数据队列,只需定义

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

对于你的字符串队列,其他人建议的std::queue< std::string >很好

顺便说一句,ALL_UPPERCASE_NAMES最好保留给宏

欢呼&amp;第h。,

答案 1 :(得分:2)

使用

std::queue<std::string>

编辑:

一些替代方案。

std::queue<std::vector<char>>
std::queue<std::array<char, 256>>

答案 2 :(得分:1)

数组不符合stdlib容器的要求(可分配等) - 例如使用boost的数组类型(或tr1 / c ++ 1x中的数组)。

答案 3 :(得分:1)

使用queue<string> CHARQUEUE;

编辑:

如果您只想存储指向某些外部缓冲区的指针,请使用queue<const char*> CHARQUEUE;,但请注意,这不会复制数据。

如果您想制作副本,请使用queue< vector<char> > CHARQUEUE;

答案 4 :(得分:0)

如果您希望内容保持不变,可以使用queue<boost::shared_array<const char>>(请参阅here)来执行此操作。

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