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大小吧
定义是不会有问题的。
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表达式出错问题