看板 C_and_CPP 關於我們 聯絡資訊
明確定義一個 Functor: (要另外定義) struct StringMatch { StringMatch(const char* keyword):keyword_(keyword){} const char* keyword_; bool operator()(const char* rhs){ return strcmp(keyword_, rhs) == 0; } } auto iter = std::find_if(v.begin(), v.end(), StringMatch(keyword)); 直接傳一個 lambda 當 Functor : (C++11 限定) auto iter = std::find_if(v.begin(), v.end(), [keyword](const char* str){ return strcmp(keyword, str) == 0; }); 轉成 std::string,再比較: (要多一份複本) std::vector<std::string> v2(v.begin(), v.end()); auto iter = std::find(v2.begin(), v2.end(), std::string(keyword)); ※ 引述《leondemon (狗狗)》之銘言: : 我在開發 ObjC (iOS) 因為某種原因,必須使用到 C++ 的 Array (Vector) : 由於我是 C++ 的新手 有一些問題想請教 : 我使用了 vector 來存放 C 語言的 const char* 如下: : // 宣告一個 CPPCharArray 型別,用來存放 const char* : typedef std::vector<const char*> CPPCharArray; : 然後初始化這個 vector : CPPCharArray v = {"dog", "cat", "apple"}; : 目前必須要使用這個 vector 來檢查是否含有一個 C 字串 : char *keyword = ... : if (std::find(v.begin(), v.end(), keyword) != v.end()) { : // The vector contains this C string. : } : 我發現這個方法比對 似乎是比較 item 的值 (位址) : 若該 keyword 是使用 concat 在 runtime 串接起來的字,在比對上時會被認為不同 item : 我有找到 find_if 的 function : 但 find_if 不支援 C Block,不知道要怎麼把 keyword 傳入該 function 內 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.44.133 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1411826102.A.0E0.html
leondemon: 謝謝,我用了 Functor 來解決 ^^ 09/28 20:00
EdisonX: const char keyword_; 這行修一下吧 09/29 08:03
※ 編輯: ot32em (115.43.44.133), 09/29/2014 21:54:14
ot32em: thx! 09/29 21:54