没有 C++ 20 的 C++ 队列操作问题

问题描述 投票:0回答:1

我想操作多维数组(矩阵)的队列,我对 std 不感兴趣,因为我的交叉编译器不完全支持 C++20

queue<float**> q; 
float A[2][3] = {{0, 1, 2}, {10, 20, 30}}; 
printf("Value from array %f\n", A[1][1]);
q.push( (float**) A );
printf("Array A added to the queue \n");
printf("Value from the queue %f\n", q.front()[1][1]); 

这是输出:

Value from array 10.000000
Array A added to the queue 
Segmentation fault (core dumped)

我也尝试过

queue<float*> q;

queue<float*> q; 
float A[2][3] = {{0, 1, 2}, {10, 20, 30}}; 
printf("Value from array %f\n", A[1][0]);
q.push( (float*) A );
printf("Array A added to the queue \n");
printf("Value from the queue %f\n", ((float**)q.front())[1][1]);

我得到了合理的结果

c++ arrays queue cross-compiling
1个回答
2
投票

该错误是因为 float[2][3] 无法直接转换为 float**。float** 意味着它需要一个 float* 数组。 如果你想直接在队列中使用它,你可以使用指向数组本身的指针,并将队列声明为保存大小为[2][3]的数组的指针,格式如下

队列q;

queue<float(*)[3]> q; 
float A[2][3] = {{0, 1, 2}, {10, 20, 30}}; 
printf("Value from array %f\n", A[1][0]);
q.push(A);
printf("Array A added to the queue \n");
printf("Value from the queue %f\n", q.front()[1][1]);

输出为 输出:

© www.soinside.com 2019 - 2024. All rights reserved.