Re: [问题] vector / const char*

楼主: ot32em (reverse(wasefo);)   2014-09-27 21:54:59
明确定义一个 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 内
作者: leondemon (狗狗)   2014-09-28 20:00:00
谢谢,我用了 Functor 来解决 ^^
作者: EdisonX (卡卡兽)   2014-09-29 08:03:00
const char keyword_; 这行修一下吧
楼主: ot32em (reverse(wasefo);)   2014-09-29 21:54:00
thx!

Links booklink

Contact Us: admin [ a t ] ucptt.com