c++ queue 使用的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ queue 使用的问题相关的知识,希望对你有一定的参考价值。

想使用queue的数组
queue <int> q[20]。。。这样定义好像有问题。。
尝试了
queue<int> * q[20];
for(int i=0; i<20;i++)
q[i] = (queue <int> *) malloc(sizeof(queue<int>)*20); //每个队列我只要20个大小。。

这样在入队的时候发生错误:pat_practise.exe 中的 0x77ea15ee 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdd1 时发生访问冲突

求大神指点。。

void main()

queue<int> * q[20];

for(int i=0; i<20;i++)

q[i] = new queue<int>;   

q[0]->push(2) ;

int a = 3 ;

    你想让队列限定在20个是不可能的,而且没有必要,它都是动态增长的,并不是一下申请100M内存

    q[i] = (queue <int>  *) malloc(sizeof(queue<int>)*20); 

    写这个问题太多了

      首先q是一个指针数组

      你想做的是对q里面的每一个指针变量赋值,把malloc的内存强制转化为(queue <int>  *) ,这个是正确的,后面是什么意思呢,你每个队列只想要20个大小,暂且不说你这个不能实现即时能实现

      sizeof(queue<int>)*20这相当于20个queue<int>的大小,这个是你的本意吗,我感觉不是吧,你想要20个int大小吧

参考技术A 1、queue <int> q[20];
定义是不会有问题的。
2、queue<int> * q[20];

sizeof(queue<int>)不是只单个队列大小,队列本来就是一个可变容器,按sizeof申请内存肯定会报内存错误。

正确申请方法:
queue<int> * q[20];
for(int i=0; i<20;i++)
q[i] = new queue<int>;
不要试图在申请的时候使用sizeof*N指定整个队列的大小,队列是容器,本身就是弹性的,你使用多少就多少,可以通过size方法获取队列的大小。

希望可以帮助到你!追问

我后来用q[20][20]解决了,因为我每个队的最大长度不超过20。。谢谢你

参考技术B std::queue<int> qTest[10];定义没有问题哦
对于类的对象,建议用new而不是malloc

以上是关于c++ queue 使用的问题的主要内容,如果未能解决你的问题,请参考以下文章

c++ 为啥 std::multimap 比 std::priority_queue 慢

C++ priority_queue 底层向量容器容量调整大小

C++ 取消引用 std::priority_queue::top [重复]

c++优先级队列priority_queue使用lambda表达式出错问题

c++优先级队列priority_queue使用lambda表达式出错问题

C++栈和队列(stack&queue)