新手在這里嘗試使用不同的方法在 C 中通過參考傳遞陣列。
對于 C ,geeksforgeeks(標題為Template Approach (Reference to Array))展示了一種通過創建模板在 C 中通過參考傳遞陣列的方法。我正在嘗試它,因為它似乎是一種不使用指標并且仍然在每個不同的函式呼叫上傳遞不同大小的陣列的方法。
請注意,在 geeksforgeeks 的以下代碼中,為陣列的大小指定了一個模板引數。
// CPP Program to demonstrate template approach
#include <iostream>
using namespace std;
template <size_t N> void print(int (&a)[N])
{
for (int e : a) {
cout << e << endl;
}
}
// Driver Code
int main()
{
int a[]{ 1, 2, 3, 4, 5 };
print(a);
}
我試圖通過制作如下模板來擴展二維陣列的邏輯:
template <size_t r, size_t c>
float approach_mean(vector<int>& n, float (&a)[r][c], float m, float d) {
return 0;
}
class Solution {
public:
int minimumDeviation(vector<int>& nums) {
float m = accumulate(nums.begin(), nums.end(), 0) / nums.size();
float dev = 0, devp = 0;
long double s = 0;
float r[2][nums.size()];
for (int i0 = 0; i0 < nums.size(); i0) {
r[0][i0] = nums.at(i0);
r[1][i0] = m - nums.at(i0);
dev = dev abs(m - nums.at(i0));
}
dev = dev / nums.size();
while (devp < dev) {
devp = dev;
dev = approach_mean(nums, r, m, dev);
break;
}
return devp;
}
// float approach_mean() {
// }
};
運行此代碼后,出現錯誤
Line 21: Char 19: error: no matching function for call to 'approach_mean'
dev = approach_mean(nums, r, m, dev);
^~~~~~~~~~~~~~~
Line 2: Char 7: note: candidate template ignored: could not match 'float' against 'float'
float approach_mean(vector<int>& n, float (&a)[r][c], float m, float d) {
^
1 error generated.
我根本想不出解決這個錯誤的方法。我知道由于某種原因它無法匹配回傳型別,即使它們是相同的。
整個邏輯是解決Leetcode 上的問題 1675的 WIP,它是關于減少陣列中的偏差。
以下是問題描述的一部分:
給你一個由 n 個正整陣列成的陣列 nums。
您可以對陣列的任何元素執行任意次數的兩種型別的操作:
如果元素是偶數,則除以2。例如,如果陣列是[1,2,3,4],那么你可以對最后一個元素做這個操作,陣列將是[1,2,3 ,2]。
如果元素是奇數,則乘以2。例如,如果陣列是[1,2,3,4],那么你可以對第一個元素做這個操作,陣列將是[2,2,3 ,4]。
陣列的偏差是陣列中任意兩個元素之間的最大差異。
回傳執行一定數量的操作后陣列可以具有的最小偏差。
uj5u.com熱心網友回復:
問題是這不是float r[2][nums.size()];標準的 C ,因為陣列的大小必須是編譯時常量。
但由于nums.size()不是常量運算式,因此它不能用于指定陣列的大小,而且它不能用作模板非型別引數,因為模板非型別引數必須是編譯時常量。
您可以通過更改nums.size()一些常量運算式來驗證這一點float r[2][nums.size()];,您會發現上述錯誤已經消失。
//-----------------v------>nums.size() replaced with 5
float r[2][5];
沒有編譯時錯誤的演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486485.html
上一篇:為什么“size_of_array”模板函式不適用于inta[n](大小在運行時定義),而它適用于inta[4]?[復制]
