C_and_CPP 板


LINE

#include <iostream> #include <tuple> #include <utility> template<int E, int H, int... Rest> struct find_helper { static constexpr auto rest() -> std::size_t { if constexpr(H==E) return std::tuple_size_v<decltype(std::make_tuple(Rest...))>; else return find_helper<E, Rest...>::rest(); } }; template<int E, int H> struct find_helper<E, H> { static constexpr auto rest() -> std::size_t { if constexpr(H==E) return 0; else return -1; } }; template<int E, int... Values> auto find_first() -> std::size_t { return sizeof...(Values) - find_helper<E, Values...>::rest() - 1; } int main() { std::cout << find_first<0, 1, 1, 1, 0, 0>(); return 0; } 如果找得到,回傳index,範圍0~N-1,N為Array 長度。 如果找不到,回傳N。 如果Array為空,編譯錯誤。 前提是Array要編譯期就知道內容。 不過如果你是面試IC廠,我想應該是動態Array。 如果裡面的值都是0跟1 我猜應該是儲存的時候就用shift存成Bits 然後使用找第一個0的bit的指令去找 這是IC廠會幹的事 記憶體量最少、計算最快。 -------------------------- #include <initializer_list> #include <iterator> #include <iostream> template<typename Iter, typename T = typename std::iterator_traits<Iter>::value_type> constexpr auto find_helper2(Iter begin, Iter end, const T expected) -> std::size_t { Iter start = begin; while(begin != end) { if (*begin == expected) return begin - start; ++begin; } return end - start; }; template<typename T> constexpr auto find_first2(const std::initializer_list<T>& list, const T expected) -> std::size_t { return find_helper2(list.begin(), list.end(), expected); }; int main() { std::cout << find_first2({1,1,1,0,0}, 0); return 0; } 今天測試另一個解法 其實編出來的code效能沒有更好 編譯時間也更長 但看起來"更像"a[5]={1,1,1,0,0} 兩個版本沒用最佳化編譯出來有差距 前一版更好 但如果用O3兩個就完全一樣了 其實可以思考一下 在"現代"C++的效能其實也不輸給C或asm 在gcc最新版x86-64 c++20 O3下編譯只有一行主體 mov eax,0x3 用asm寫code都不見得贏 ※ 引述《Kuba4ma ()》之銘言: : 各位大神好 : 本魯最近在準備某間IC廠的面試 : 在網路上找到這題考古題 : 題目如下 : ``` : 給一個sorted array(ex: a[5]={1,1,1,0,0}),請找出第一個0的位置,請使用能降低CPU : 跟memory負擔的用量 : ``` : 我能想到的就只有用for loop掃過一遍而已 : 請問還有更好的方法嗎 : 謝謝 ----- Sent from MeowPtt on my iPhone --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.57.210 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1654660245.A.427.html
1F:→ hsnuyi: 如果是IC廠 就是在C裡面內嵌assembly 不是用C++ 06/09 02:29
2F:→ CoNsTaR: 看樓上推文就想到這篇 #1LFwOPgj (C_and_CPP) 06/09 06:07
3F:→ CoNsTaR: 雖然沒用到 asm 06/09 06:08
4F:→ hsnuyi: 如果array大到在DRAM內 其實有很多可討論的... 連CPU外的 06/10 00:09
5F:→ hsnuyi: bus上能傳怎樣的指令都可拿出來檢驗... 06/10 00:09
有具體的例子可以說明嗎? ※ 編輯: OnlyRD (118.166.209.186 臺灣), 06/10/2022 01:07:39
6F:推 CoNsTaR: 編譯時期先算好這個 asm 要怎麼贏?XD 06/10 01:50
7F:→ CoNsTaR: 主要的問題應該還是面試想要考你什麼吧 06/10 01:50
8F:→ hsnuyi: IC設計會考的就不會是template 驗證設計也是用asm打AXI傳 06/10 03:51
9F:→ hsnuyi: 輸上bus 有時還要注意MMU和cache 要用C++解就沒啥好評論 06/10 03:51
10F:→ hsnuyi: 的了 06/10 03:51







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP