Re: [問題] vector / const char*

看板C_and_CPP作者 (reverse(wasefo);)時間9年前 (2014/09/27 21:55), 9年前編輯推噓0(003)
留言3則, 3人參與, 最新討論串3/3 (看更多)
明確定義一個 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

09/28 20:00, , 1F
謝謝,我用了 Functor 來解決 ^^
09/28 20:00, 1F

09/29 08:03, , 2F
const char keyword_; 這行修一下吧
09/29 08:03, 2F
※ 編輯: ot32em (115.43.44.133), 09/29/2014 21:54:14

09/29 21:54, , 3F
thx!
09/29 21:54, 3F
文章代碼(AID): #1K9i6s3W (C_and_CPP)
文章代碼(AID): #1K9i6s3W (C_and_CPP)