我正在嘗試創建一個二維點佇列,如下所示:
queue<int[2]> q;
但是,在執行以下操作后會編譯:
q.push({0,0});
我收到一個編譯錯誤,說我的呼叫push不明確。不知道如何解決這個問題。請幫忙。
我不確定這是否是在平面上表示二維點的好方法,但在我看來它是最輕量級的。
uj5u.com熱心網友回復:
您可以為 2D 點創建結構:
struct Point2D {
int x;
int y;
};
您可以創建一個std::vector而不是std::queue.
std::vector<Point2D> q {{ {1, 2}, {9, 3}, ... }};
你通常可以:
q.push_back({0, 0});
編輯:您也可以創建一個向量int[2]而不是Point2D做同樣的事情。
uj5u.com熱心網友回復:
您始終可以創建一個結構來保存您的點坐標。無論您當前的問題如何,為此類物體提供一個表示實際上是一個好主意。
下面的答案是關于 c 中陣列的更通用的答案,不需要自定義結構:
在 c 中,通常建議使用它來std::array代替如此小的固定大小的 c 樣式陣列(以及std::vector動態大小的陣列)。
代碼示例:
#include <queue>
#include <array>
int main() {
std::queue<std::array<int,2>> q;
q.push({ 0,0 });
return 0;
}
旁注:最好避免using namespace std- 請參閱此處為什么“使用命名空間 std;” 被認為是不好的做法?.
uj5u.com熱心網友回復:
您可以使用 Pair 來表示您的積分。
queue<pair<int,int>>q;
q.push({0,0});
uj5u.com熱心網友回復:
陣列只是指標。原始 C 陣列不能存盤在容器中。
解決方案 1:使用存盤元素的型別為 int*
std::queue<int*> q1;
int s1[2]{0,0};
q1.push(s1);
解決方案 2:使用其他容器,如 std::array 或 std::vector
std::queue<std::array<int,2>> q;
q.push({0,0});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514910.html
標籤:C 数组队列
