我嘗試使用 lambda 運算式并count_if()在 a 中找到相同的字串值vector,但沒有奏效。錯誤資訊是:
無法在未指定捕獲默認值的 lambda 中隱式捕獲變數“str”
std::vector<std::string> hello{"Mon","Tue", "Wes", "perfect","Sun"};
for (unsigned int i = 0; i < hello.size(); i )
{
int n=0;
std::string str=hello[i];
n=std::count_if(hello.begin(),hello.end(),[](std::string s){return s==str;});
std::cout<<n;
}
uj5u.com熱心網友回復:
@Steven []lambda 函式的括號稱為捕獲串列。它們定義了 lambda 函式使用的變數范圍。請參閱此參考資料。
當您使用這種格式時[&],這意味著您可以在 lambda 函式中看到當前作用域的所有變數(通過參考)。所以變數的型別并不重要。
對于您的示例,當您撰寫:
s == str
lambda 函式只知道s作為引數傳遞的變數。要查看str,您可以使用以下任一方法:
[&],通過參考傳遞一切[&str], 只傳遞變數str作為參考
請注意,也有按值傳遞的方法。
uj5u.com熱心網友回復:
此函式具有相同的機制,只是它使用<hash>和<unordered_map>存盤值以及每個值的重復次數(如果大于1 出現次數)。
template <typename T>
void elements(vector<T>& e)
{
auto h = [](const T* v) { return std::hash<T>()(*v); };
auto eq = [](const T* v1, const T* v2) { return v1->compare(*v2) == 0; };
std::unordered_map<const T*, size_t, decltype(h), decltype(eq)> m(e.size(), h, eq);
// Count occurances.
for (auto v_i = e.cbegin(); v_i != e.cend(); v_i)
m[&(*v_i)];
// Print value that occur more than once:
for (auto m_i = m.begin(); m_i != m.end(); m_i)
if (m_i->second > 1)
std::cout << *m_i->first << ": " << m_i->second << std::endl;
}
例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359115.html
上一篇:在這個代碼示例中,什么是大O,O(N)或O(N^2)?
下一篇:無限排序陣列中二分查找的索引錯誤
