/*
使用STL的queue时,元素入队的push操作只是制造了该元素的一个副本入队
入队后对原元素的修改不会影响队列中的副本,对队列中副本的修改不会改变原元素
*/
#include<cstdio>
#include<queue>
using namespace std;
struct node{
int data;
}a[10];
int main(){
queue<node> q;
for(int i = 1; i <= 3; i++){
a[i].data = i;
q.push(a[i]);
}
q.front().data = 100; //无法修改原元素a[1],修改队列中的副本
printf("%d %d %d\n", a[1].data, a[2].data, a[3].data);
a[1].data = 200; //无法修改队列中的元素
printf("%d\n", q.front().data);
//当需要对队列中的元素进行修改时,队列中存放元素的编号
queue<int> qu;
for(int i = 1; i <= 3; i++){
a[i].data = i;
qu.push(i);
}
a[qu.front()].data = 100; //通过下标修改原元素
printf("%d\n", a[1].data);
return 0;
}
BFS例题3-STL的queue,入队的是元素的副本
最新推荐文章于 2021-09-16 20:47:09 发布