作者ot32em (reverse(wasefo);)
看板C_and_CPP
標題Re: [問題] vector / const char*
時間Sat Sep 27 21:54:59 2014
明確定義一個 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